抱歉,我是这个网站的新手,但我的代码有问题,我在 JPanel 上绘制一组图像,所以我重写了绘制方法,但是当我运行该项目时,我看起来它正在运行两次..因为我尝试放置 println,它在输出中出现两次。请帮忙:(
public class PanelDibujo extends JPanel {
String cadenaOficial;
public PanelDibujo(String cad){
cadenaOficial=cad;
}
@Override
public void paint(Graphics a){
Toolkit t=Toolkit.getDefaultToolkit();
Image imagen=t.getImage("imagenes/muro.jpg");
g.drawImage(imagen, 20, 20, this);
System.out.println(cadenaOficial);
}
}
我从此框架创建了面板:
public class VentanaPrincipal extends JFrame{
public VentanaPrincipal() {
PanelDibujo panel= new PanelDibujo(cadenaOficial);
setLocation(300, 10);
setDefaultCloseOperation(3);
setSize(660, 700);
add(panel);
}
}
最佳答案
- Swing 的第一条规则是,您无法控制绘制过程。当系统决定需要完成绘画时,就会发生绘画,这称为被动绘画。您可以向系统提出重新绘制的建议,但由系统决定可能发生的内容和时间
- 不要覆盖
paint
,覆盖paintComponent
并确保您调用super.paintComponent
在进行任何定制绘画之前。绘画是通过一系列链接的方法调用完成的,打破这个链条非常容易,最终会出现无穷无尽的奇怪的绘画工件。通用约定建议您覆盖paintComponent
相反,因为它通常是一个更安全的绘画场所 - 不要在任何绘制方法中加载资源或执行任何长时间运行的操作,这会减慢您的重绘速度,并且绘制应尽可能快地运行
- 绘制应该绘制组件的当前状态,并且应该避免执行任何计算,并且内部几乎没有逻辑。关于如何更改状态的决定应该在外部完成(例如通过 setter ),然后触发
repaint
组件的
参见Painting in AWT and Swing和 Performing Custom Painting有关绘画的更多详细信息
关于java - 覆盖paint()运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012238/