1

我有一个 JButton,在 JPanel 中,在 JApplet 中,单击它时会执行一些操作,更改 JPanel 的内容,然后应该重新绘制。但是,它似乎并没有重绘按钮本身,而 JPanel 也在重绘它的自身。但是,我认为我需要让 JApplet 自己重新绘制。本质上,我会单击其中一个按钮,按钮会改变,但 JLabels 不会出现。一旦我重新调整小程序,或者在浏览器中将其缩小到浏览器的两侧接触到小程序,它就会全部重置并且看起来很棒!其中一个按钮代码如下:

reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                //resets the vars
            questions = 0;
            wrong = 0;
            correct = 0;
            //clears the JPanel
            overallJP.removeAll();
            //adds new question, and buttons
            rand = generator.nextInt(10);
            JLabel tmp = new JLabel("Answer the Question: "+"\n"+qArr.get(rand).getQuestion());
            overallJP.setSize(new Dimension(500,700));
            overallJP.add(tmp);
            overallJP.add(buttonArea);
            overallJP.repaint();
            setVisible(true);
            repaint();
            }
        });

其他按钮看起来相似。我认为问题出在底部的 repaint() 上。有没有办法从这个匿名函数内部调用 JApplet 的重绘?重置按钮在小程序的 init() 中声明。如果您有更多问题或需要更多代码,请询问!

4

1 回答 1

4

由于您要从面板中删除组件,因此您可能需要重新验证它。尝试添加:validate();

编辑:

Container.validate()触发容器的重新布局。它应该在容器被修改时调用——在容器显示后添加、删除组件等。

于 2012-10-11T03:30:04.623 回答