2012-04-27 73 views
1

我有一個包含JList的面板。 當我將這個面板添加到西部BorderLayout與一個元素一切都OK,我看到它的一個元素,但如果我添加新元素或清除所有元素,我看不到任何效果。爲什麼JList不顯示新添加的元素?

任何機構能提出任何解決方案嗎?

到FtpPanel將被添加含有的JList

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

}

FtpTabPanel JPanel類

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

回答

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調用)。似乎這個問題是在別的地方...

+0

*「似乎問題在別的地方」* OP - 爲了更好地幫助您,請發佈[SSCCE](http://sscce.org/)。 – 2012-04-27 11:30:45

-2

我最近有類似的問題。解決它就像這樣:

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

只有它的方式,我不知道爲什麼。

+1

-1如果這似乎是一種解決方案,那麼您在其他地方正在做一些非常錯誤的事情(很可能該模型不符合其變更通知合同,或者您正在更改其腳下的基礎數據結構) – kleopatra 2013-06-27 09:54:57

相關問題