我在JPanel中的JApplet中有一个JButton,单击该按钮时会执行一些操作,更改JPanel的内容,然后重新绘制。但是,除了按钮本身,它似乎还没有重绘任何东西,而JPanel也正在重绘它的自我。但是,我认为我需要让JApplet重新绘制自身。本质上,我将单击其中一个按钮,按钮将发生变化,但是JLabel将不会显示。一旦我重新调整了applet的大小,或者在浏览器中将其缩小到浏览器侧面碰到applet的大小,所有这些重置并且看起来很棒!
按钮代码之一如下:
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的重绘?重置按钮在applet的init()中声明。如果您有更多问题或需要更多代码,请问!
最佳答案
由于要从面板中删除组件,因此可能需要重新验证它。尝试添加:validate();
编辑:
Container.validate()触发容器的重新布局。修改容器后应调用它-显示容器后添加,删除组件等。