JPanel重绘问题
我有一个JFrame,其中包含2个JPanel子类和BorderLayout中的2个JLabel。其中一个JPanel包含JButtons,另一个用于显示图形。JLabels位于北部和南部,西部是JPanel按钮,中间是JPanel。
显示JPanel需要不断刷新,所以我通过swing计时器生成的动作事件调用它的repaint()方法。我也覆盖它的paintComponent()方法来做我的绘图。
而不是显示我绘制的内容,“JFrame的内容”被绘制到显示JPanel上。我知道在完成绘图之前,我可以通过使用g.fillRect()或super.paintComponent()简单地“清除”显示JPanel。
我只是好奇为什么会这样。
我正在使用jdk 1.6u27。下面是我的代码:packagetest;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;publicclassMain{publicstaticvoidmain(String[]args){
Simulationsim=newSimulation();
}}classSimulationextendsJFrame{
publicJLabelstate;
privateJLabelid;
privateButtonPanelcontrol;
privateDisplaydisplay;
publicSimulation(){
id=newJLabel("Test");
state=newJLabel("Test");
control=newButtonPanel();
display=newDisplay(this);
this.setLayout(newBorderLayout());
this.add(id,BorderLayout.NORTH);
this.add(control,BorderLayout.WEST);
this.add(display,BorderLayout.CENTER);
this.add(state,BorderLayout.SOUTH);
this.setSize(500,600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicButtonPanelgetControl(){
returnthis.control;
}}classButtonPanelextendsJPanelimplementsActionListener{
publicJButtonb[]=newJButton[8];
publicbooleanbp[]=newboolean[8];
publicButtonPanel(){
this.setLayout(newGridLayout(8,1));
for(inti=0;i
b[i]=newJButton(""+i);
b[i].addActionListener(this);
bp[i]=false;
this.add(b[i]);
}
}