java - 为什么Java swing组件做不出打字效果

标签 java swing netbeans-8

我正在使用 netbeans8 来完成我的 java 项目。
这是一个java函数,我创建它来执行一些打字效果。程序没有显示错误,并且运行良好。

任何人都可以在您的程序中复制此函数并运行它。然后查看结果。您可以在其中看到实际的问题。是我的错误还是其他原因。 这是我的代码

private void type_writer_effect() {
        CERT[0]="10101101 1010101 101010101101 011001";
        CERT[1]="10101101 1010101 101010101101 011001";
        CERT[2]="10101101 1010101 101010101101 011001";
        CERT[3]="10101101 1010101 101010101101 011001";
        CERT[4]="10101101 1010101 101010101101 011001";        
        CERT[5]="10101101 1010101 101010101101 011001";
                     //   Here simply i wrote an array named CERT[6]
                     // not an actual value.its just for testing

 int i=0;                                                       
 int j=0;
 jTextPane1.setText(" ");
    for(i=0;i<=5;i++) {                                                 

       for(j=0;j<=CERT[i].length()-1;j++) {
           // to display in console
           System.out.println(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j)));

           // to display in jTextPane
           jTextPane1.setText(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j))); 

           if(CERT[i].charAt(j) == ' ') {     
             try {
                 Thread.sleep(20);
                 } catch (InterruptedException ex) {
                  System.err.println(ex);}
            } else {
             try {
                 Thread.sleep(10);
                 } catch (InterruptedException ex) {
                // System.err.println(ex);}
            }                                                    
        }                                                
     jTextPane1.setText(jTextPane1.getText()+"\n");
    }
}


private void jButton1MousePressed(java.awt.event.MouseEvent evt) { 
  type_writer_effect();
}

netbeans 输出面板中的结果看起来很棒,完全符合我的需要。

// to display in console
       System.out.println(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j)));

但结果显示在其他java swing组件中,例如 jTextpanejLabeljTextArea没有获得任何打字效果。

// to display in jTextPane
       jTextPane1.setText(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j))); 

有谁帮我在jTextarea中显示同样的打字效果吗?如输出面板所示?

最佳答案

尝试创建一个计时器来实现打字效果。像这样的事情:

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:

        Timer t = new Timer(100, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //System.out.println("J = " + j);  //for debugging
               // System.out.println("I = " + i);
                if(j >= CERT[i].length()){
                    j = 0;
                    i++;
                    jTextArea1.setText(jTextArea1.getText() + "\n");

                }

              if(i >= CERT.length) ((Timer)e.getSource()).stop();
              else{
                  jTextArea1.setText(jTextArea1.getText() + CERT[i].charAt(j));
                  j++;
              }
            }
        });
        t.setRepeats(true);
        t.start();
    }  

这样我认为当你调用Thread.sleep时UI线程就不会被卡住。

关于java - 为什么Java swing组件做不出打字效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618576/

相关文章:

java - 如何通过蓝牙在两个设备之间共享相机 View

java - 如何将 JTextField 中的数据传输到 JLabel?

java - 获取 JToggleButton 的状态

java - 找不到 cfg.xml 资源 (/hibernate.cfg.xml)

codeigniter - 如何将 codeIgniter 与 netbeans 完全集成

java - MinCoins 项目缺少主类

java - 使用 java 查看 .bson 文件的内容

java - Kafka : ClassCastException: class org. apache.avro.generic.GenericData$Record 无法转换为类

java - 与 Graphics2d、 Canvas 和形状混淆

java - 如何让 web-fragment.xml 工作