我有一个包含 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/