1

JListを含むパネルがあります。このパネルを1つの要素で西のBorderLayoutに追加すると、すべてがOKで、1つの要素が表示されますが、新しい要素を追加するか、すべての要素をクリアすると、効果がありません。

どんな体も解決策を提案できますか?

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に追加および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(真);

それが私によって機能した唯一の方法で、理由はわかりません。

于 2013-06-27T09:38:08.893 に答える