为什么Java个swing组件打字效果失败
Why Java swing components failed to do typewriting effect
我正在使用 netbeans8 来完成我的 java 项目。
这是一个 java 函数,我创建它来执行一些输入 effect.Program 显示没有错误,并且工作正常。
任何人都可以在您的程序中复制此函数,然后 运行 it.and 查看 result.there 您可以看到实际问题..是我的错误还是其他原因。
这是我的一些代码
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 Components 像 jTextpane
或 jLabel
或 jTextArea
中的结果没有得到任何输入效果。
// to display in jTextPane
jTextPane1.setText(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j)));
有没有人帮我在 jTextarea
中显示与 输出面板 中相同的打字效果?
尝试创建一个 Timer
来实现打字效果。像这样:
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 线程不会卡住。
我正在使用 netbeans8 来完成我的 java 项目。
这是一个 java 函数,我创建它来执行一些输入 effect.Program 显示没有错误,并且工作正常。
任何人都可以在您的程序中复制此函数,然后 运行 it.and 查看 result.there 您可以看到实际问题..是我的错误还是其他原因。 这是我的一些代码
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 Components 像 jTextpane
或 jLabel
或 jTextArea
中的结果没有得到任何输入效果。
// to display in jTextPane
jTextPane1.setText(jTextPane1.getText()+String.valueOf(CERT[i].charAt(j)));
有没有人帮我在 jTextarea
中显示与 输出面板 中相同的打字效果?
尝试创建一个 Timer
来实现打字效果。像这样:
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 线程不会卡住。