Java 刷新JDesktopPane不工作

Java 刷新JDesktopPane不工作,java,jlabel,repaint,jdesktoppane,Java,Jlabel,Repaint,Jdesktoppane,我想用指定的行数创建我读取的文件的预览。我的代码工作得很好,问题是如果我选择其他行数,JDesktopPane不会刷新,它会覆盖前面的行 我的代码如下所示: previewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try {

我想用指定的行数创建我读取的文件的预览。我的代码工作得很好,问题是如果我选择其他行数,JDesktopPane不会刷新,它会覆盖前面的行

我的代码如下所示:

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();
   }
}