JPanel仅在滚动时重新绘制

时间:2015-04-07 23:53:37

标签: java swing scroll jpanel repaint

我在JScrollPane中有一个JPanel。我在JPanel的一个列中添加了一些JButton,这很好用;我可以轻松向下滚动并按下我想要的任何按钮。 按下按钮时我想更改JPanel的内容。假设我想用一组新的JButton替换JButton。

这是我的做法(简化):

private void replace(String[] newButtonNames){
        panel.removeAll();      //Removing all old buttons from my JPanel
        JButton button;
        for(int i=0; i<newButtonNames.length; i++){
            button = new JButton(newButtonNames[i]);  //Create a new button
            panel.add(button);   //Add the button to the panel
        }
        panel.repaint();   //Repainting it so that the results show up
    }

我遇到的问题是“重新绘制”方法似乎只删除旧按钮,留下一个空白的JPanel。然而,第二个我滚动新按钮立即出现,所以看起来JPanel根本没有正确重新绘制。

我试着寻找这个,但没有得到任何东西。如果你知道答案,请告诉我(如果你知道这里的另一篇帖子有相同的问题,有答案,那么链接也会非常感激)

非常感谢你!

1 个答案:

答案 0 :(得分:3)

默认情况下,在调用布局管理器之前,组件的大小/位置为(0,0)。所以没有什么可画的。

删除/添加组件到面板的一般代码是:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

只有在对面板完成所有更新后才会执行revalidate()和repaint(),因此您只需调用一次布局管理器。