删除后,JPanel仍然有按钮()

时间:2015-03-13 08:42:52

标签: java swing

我正在开发一个项目,该项目使用填充了动态生成按钮的JPanel,从列表中读取数据。 我有一个下一个和前一个按钮来浏览页面。 在前两页上一切正常,但在第三页,当列表的剩余大小小于32(最大按钮完全适合页面),只剩下5个按钮“生成”时,旧按钮从上一页显示,即使我拨打jPanel.removeAll(),我也尝试添加jPanel.revalidate()

注意,列表内容不会改变。

以下是代码:

private void loadCat(int catnr) { //loads second,third,etc. category page
    jMainPanel.removeAll();
    jMainPanel.revalidate();

    for (int i = catnr; i < engine.LoadItems.catlist.size(); i++) {
        if (i == catnr + 32) // more than 32 buttons do not fit per page
            break;
        final JButton btn = new JButton();
        btn.setPreferredSize(new Dimension(100, 50));
        btn.setText(engine.LoadItems.catlist.get(i));
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                //some code here (...)
            }
       });
       jMainPanel.add(btn);
       jMainPanel.setPreferredSize(new Dimension(436, 480));
       jMainPanel.revalidate();  
    }
}

问题:如何让面板仅显示第3页(或将来的任何页面)上的剩余项目?我做错了什么?

截图:

http://oi59.tinypic.com/2dqisug.jpg

http://oi60.tinypic.com/ifoqiu.jpg

1 个答案:

答案 0 :(得分:3)

添加/删除组件后调用

revalidate();
repaint();

重新验证调用布局管理器以重新计算所有组件的大小并重新绘制重新绘制新大小的组件。