【问题标题】:why JList doesn't display new added element?为什么 JList 不显示新添加的元素?
【发布时间】:2012-05-08 02:54:30
【问题描述】:

我有一个包含 JList 的面板。 当我将此面板添加到带有一个元素的西 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();
            }
        });
 }

【问题讨论】:

    标签: java swing ftp jlist


    【解决方案1】:

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

    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 调用)。似乎问题出在其他地方...

    【讨论】:

    • “似乎问题出在其他地方” OP - 为了尽快获得更好的帮助,请发布SSCCE
    【解决方案2】:

    我最近遇到了类似的问题。像这样简单地解决它:

    (将元素添加到 Jlist) Jlist.setVisible(false); Jlist.setVisible(true);

    只有我能用,不知道为什么。

    【讨论】:

    • -1 如果这似乎是一个解决方案,那么您在其他地方做错了什么(很可能该模型不遵守其更改通知合同,或者您正在更改其脚下的基础数据结构)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多