用Java重画图形
我刚刚开始学习Java中的图形,我遇到了一个问题。我创建了一个带有JPanel面板的JFrame窗口(NetBeans设计器),并在其上绘制了一些图形。然后我添加了一个JButton,它改变了一个变量,这将改变一个正方形在JPanel上的X位置 按下按钮时,此代码将执行:用Java重画图形,java,swing,jpanel,graphics2d,Java,Swing,Jpanel,Graphics2d,我刚刚开始学习Java中的图形,我遇到了一个问题。我创建了一个带有JPanel面板的JFrame窗口(NetBeans设计器),并在其上绘制了一些图形。然后我添加了一个JButton,它改变了一个变量,这将改变一个正方形在JPanel上的X位置 按下按钮时,此代码将执行: drawObject.setX(150); drawObject.repaint(); drawObject是此类的一个实例: public class sola extends JPanel { private
drawObject.setX(150);
drawObject.repaint();
drawObject是此类的一个实例:
public class sola extends JPanel {
private int x = 10;
@Override
public void paintComponent(Graphics g){
super.paintComponents(g);
super.setBackground(Color.WHITE);
g.setColor(Color.ORANGE);
g.fill3DRect(x, 160, 100, 50, true);
}
public void setX(int xX){
x = xX;
}
}
现在,当我按下JButton时,矩形确实会移动到新位置,但是它在旧位置仍然可见。只有当我调整窗口大小时,它才会刷新,旧的矩形才会消失。如何解决此问题,以便按下按钮时,矩形仅在新位置可见?您可以使用JComponent中的以下方法:() 您可以在重新绘制()之前调用这些
super.paintComponent(g);
不是
两者之间有很大的区别!第一个命令告诉您的JPanel执行通常由paintComponent方法执行的所有内务管理功能,包括重新绘制背景(项目的关键点)。第二,你的电话不具备上述任何功能。因此,我的建议是去掉超级调用中的尾随s。您可以使用
repaint()
方法来执行此操作
如果使用面板上的paintComponent()。你应该照顾好整个嵌板上的画。在您的示例中没有涉及删除旧绘制矩形的代码
我建议您为矩形创建自己的组件。(可以从组件进行扩展)然后可以像在面板中那样重写这些类的paintComponent
方法。因为面板应该充当容器组件。而不是自己画矩形
知道如何将这些组件的实例添加到普通JPanel。然后应按预期进行更新。要更快获得更好的帮助,请发布SSCCE()。如果你有问题,别忘了加一个问号(?),我想这是第一个问题的一个非常清楚的问题。
super.paintComponent(g);
super.paintComponents(g); // note the s at the edn