эффект пишущей машинки с JTextArea и сканером JAVA - PullRequest
0 голосов
/ 29 апреля 2018

Я делаю игру с моим товарищем по команде для школьного проекта.
Я создал JTextArea, где будут напечатаны строки текстового файла.
Я хотел бы добавить эффект typeWriter, поэтому я искал ответы на этом сайте.
Я нашел немного симпатичной информации здесь:
Java-надстройка машинка эффекта-к-JTextArea с помощью таймера к достижению-пишущая эффект-в-JTextArea Я пробовал решения выше, но безуспешно.

Я поставлю свой код:

    public static void ui() {

    Font baseText = new Font("Roboto", Font.PLAIN, 30);

    JFrame mainWindow = new JFrame("Main Window");

    JTextArea textArea = new JTextArea();
    textArea.setFont(baseText);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    textArea.setEditable(false);

    JPanel panelButton = new JPanel();
    panelButton.setLayout(new FlowLayout());

    JButton bContinue = new JButton("Continue");
    bContinue.setFont(baseText);

    Path path = FileSystems.getDefault().getPath("beginning.txt");
    try {
        Scanner sc = new Scanner(path);
        while(sc.hasNextLine()){
            slowDisplay(line, textArea);
        }
    } catch (IOException ex) {
        Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
    }

    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    panelButton.add(bContinue);
    mainWindow.add(textArea);
    mainWindow.add(panelButton, BorderLayout.SOUTH);
    mainWindow.setBounds(0, 0, 1920, 1080);
    mainWindow.setVisible(true);
    }

Вот содержание метода slowDisplay:

    public static void slowDisplay(String line, JTextArea textArea){
    Timer timer = new Timer(500, null);
    timer.addActionListener(new ActionListener(){
        int index=0;

        @Override
        public void actionPerformed(ActionEvent e) {
          if(index<line.length()){
              textArea.append(String.valueOf(line.charAt(index++)));
          }
          else if(index==line.length()){
              textArea.append("\n");
          }
          else{
              timer.stop();
          }
        }

    });
    timer.start();

}

Что он делает, так это просматривает столбцы текстовых файлов и пишет символы, создает что-то ужасное, нечитаемое, и я не знаю почему: вещь

Я положу содержимое моего текстового файла:

  • -Mmmh ...
  • -Я-мне холодно. Где я?
  • -Huh? Это то место, где я лежу - это растение размером с человека?!
  • Я оглянулся, ничего не увидел, кроме деревьев, кустов и растений.
  • -Что за ...

Если кто-то может направить меня, пожалуйста, я был бы признателен.

1 Ответ

0 голосов
/ 29 апреля 2018

Я тоже давно пробовал эффект пишущей машинки. Вместо этого я использовал функцию Thread.sleep () для выполнения этой задачи.

Так вот метод для этого.

 void typeEffect(String str,JTextArea textArea)throws Exception{

     //loop through each character and append it to the JTextArea
      for(int i==0;i<str.length();i++){

         textArea.append(str.charAt(i)+"");

          Thread.sleep(20);//stops for 20 milliseconds


       }

}

Это выглядит очень просто.

РЕДАКТИРОВАТЬ 1: -

У меня есть этот код, который работает как требуется.

 import javax.swing.*;

    class DelayTest
    {

        public static void main(String args[])throws Exception
        {
            JFrame f=new JFrame("Main Frame"); 
            JTextArea textA=new JTextArea();

             f.setSize(720,600);
             f.add(textA);
             f.setVisible(true);
             typeEffect("Hello This is a sample String",textA);
        }

         static void typeEffect(String str,JTextArea textArea)throws Exception{

         //loop through each character and append it to the JTextArea
          for(int i=0;i<str.length();i++){

             textArea.append(str.charAt(i)+"");

              Thread.sleep(100);//stops for 100 milliseconds
             }//closing of loop
         }//closing of method
  }//closing of class

Я выполнил этот код и нашел его работающим.

...