提问者:小点点

JPanel仅在滚动时重新绘制


我在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,0),直到您调用布局管理器。所以没有什么可画的。

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

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

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