1

我有一个包含 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();
            }
        });
 }
4

2 回答 2

3

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

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

于 2012-04-27T11:06:37.250 回答
-2

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

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

只有我工作的方式,不知道为什么。

于 2013-06-27T09:38:08.893 回答