java - 为什么JList不显示新添加的元素?

标签 java swing ftp jlist

我有一个包含 JList 的面板。 当我用一个元素将此面板添加到 west BorderLayout 时,一切正常,我看到其中有一个元素,但如果我添加新元素或清除所有元素,我看不到任何效果。

任何机构都可以提出任何解决方案吗?

包含 JList 的 JPanel 类

public class FtpPanel extends JPanel{
public JList ftpJList;
public DefaultListModel ftpListModel;

public FtpPanel(String[] list) {
    this.setLayout(new BorderLayout());
    this.setBorder(new EmptyBorder(20, 20, 20, 20));
    this.ftpListModel = new DefaultListModel();
    for(String s : list){
        this.ftpListModel.addElement(s);
    }
    this.ftpJList = new JList(ftpListModel);
    final JScrollPane wsp = new JScrollPane(this.ftpJList);
    wsp.setBorder(new TitledBorder(new WebBorder(),"ftpsrv.itra.de"));
    this.add(wsp, BorderLayout.CENTER);
}

}

将添加 FtpPanel 的 FtpTabPanel

public class FtpTabPanel extends JPanel{
public FtpPanel ftpPanel;
public FtpTabPanel() {
    createComponents();
    layoutComponents();
    initializeComponents();
}

private void createComponents() {
    ftpPanel = new FtpPanel(new String[]{"You aren't Connected"});
}
private void layoutComponents() {
    setLayout(new BorderLayout());
    add(ftpPanel,   BorderLayout.WEST);
}

}

在 Jlist 中添加和删除

 addFileToJlist(listOfFtpFile ){
   SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                if(listOfFtpFile !=null)
                    ftpTabPanel.ftpPanel.ftpListModel.clear();
                    ftpTabPanel.ftpPanel.updateUI();
                    for(String s : listOfFtpFile){
                       ftpTabPanel.ftpPanel.ftpListModel.addElement(s);
                        ftpTabPanel.ftpPanel.ftpWebList.validate();
                        ftpTabPanel.ftpPanel.updateUI();
                    }
                ftpTabPanel.ftpPanel.ftpWebList.revalidate();
                panel.updateUI();
            }
        });
 }

最佳答案

这是一个简单的工作示例(与您的几乎相同,但没有不必要的更新):

public static void main ( String[] args )
{
    JFrame frame = new JFrame ();

    final DefaultListModel model = new DefaultListModel ();

    JList list = new JList ( model );
    frame.add ( new JScrollPane ( list ) );

    list.addMouseListener ( new MouseAdapter ()
    {
        public void mousePressed ( MouseEvent e )
        {
            model.clear ();
            Random random = new Random ();
            int max = random.nextInt ( 10 );
            for ( int i = 0; i <= max; i++ )
            {
                model.addElement ( "" + random.nextInt ( 100 ) );
            }
        }
    } );

    frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
    frame.setSize ( 200, 400 );
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}

而且我在您的示例中并没有真正看到任何问题(除了不必要的验证和 updateUI 调用)。看来问题出在其他地方......

关于java - 为什么JList不显示新添加的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10349267/

相关文章:

php - ftp_connect PHP 问题

c# - 如何在无人干预的情况下自动连续轮询FTP服务器

java - 使用 @JsonView 的 Spring Json-Serialization 返回关联的空对象

java - 移动后组件不再可调整大小

java - 在 Java 的 GUI 层次结构中查找组件

java - 在 BoxLayout 中将按钮居中对齐

powershell - 每两到三次成功上传后ftp上传失败

java - 如何从 ZonedDateTime 转换为 Joda DateTime

java - 将字节显示为无符号

java - 是否可以同时点击两个JSlider