Java 刷新JDesktopPane不工作
我想用指定的行数创建我读取的文件的预览。我的代码工作得很好,问题是如果我选择其他行数,JDesktopPane不会刷新,它会覆盖前面的行 我的代码如下所示:Java 刷新JDesktopPane不工作,java,jlabel,repaint,jdesktoppane,Java,Jlabel,Repaint,Jdesktoppane,我想用指定的行数创建我读取的文件的预览。我的代码工作得很好,问题是如果我选择其他行数,JDesktopPane不会刷新,它会覆盖前面的行 我的代码如下所示: previewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try {
previewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try {
if(Integer.parseInt(nrLines.getText()) < 20) {
for(int i=0; i< Integer.parseInt(nrLines.getText());i++){
previewLabel[i] = new JLabel(" ");
previewLabel[i].setText("Line nr. "+(i+1)+": "+previewList.get(i));
previewLabel[i].setBounds(20,575+25*i,700,300);
previewLabel[i].setVisible(true);
desktopPane.add(previewLabel[i]);
}
desktopPane.repaint();
}
else {
System.out.println("Maximim number of lines is 20 !");
}
} catch (Exception e) {
System.out.println("Please enter a integer value !");
}
}
});
desktopPane.add(previewButton);
previewButton.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件){
试一试{
if(Integer.parseInt(nrLines.getText())<20){
对于(int i=0;i
下面是我选择其他行数后的效果:
提前感谢您的帮助 查看您的代码,似乎每次调用
actionPerformed()
时,您都会将新的previewLabel
s添加到desktopPane
。您可以尝试跟踪所添加的内容(或检查desktopPane
的子项),并在添加新标签之前删除旧标签
或者,您可以替换旧标签的内容,而不是创建新标签
示例(我没有使用您的代码,但它显示了我正在考虑的两种方法):
谢谢你的回答。你能帮我个忙吗?我怎样才能把旧的换成新的?我尝试了我所知道的一切…非常感谢你!我真的被这件事吓坏了。我知道我做错了什么,但不知道如何纠正它。再次感谢
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
class Test {
static JLabel labelToReplace;
static JLabel labelToUpdate;
private static JLabel newLabel(String s) {
JLabel l = new JLabel(s);
l.setBounds(30, 160, 200, 40);
labelToReplace = l;
return l;
}
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setSize(300, 300);
JDesktopPane desktopPane = new JDesktopPane();
frame.setContentPane(desktopPane);
// This one we will update.
labelToUpdate = new JLabel("Test label");
labelToUpdate.setBounds(30, 120, 200, 40);
desktopPane.add(labelToUpdate);
// This one we will replace.
desktopPane.add(newLabel("Another"));
JButton btnRefresh = new JButton("Refresh");
btnRefresh.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
labelToUpdate.setText(new Date().toString());
desktopPane.remove(desktopPane.getIndexOf(labelToReplace));
desktopPane.add(newLabel(new Date().toString()));
}
}
);
btnRefresh.setBounds(30, 50, 100, 70);
desktopPane.add(btnRefresh);
frame.show();
}
}