Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java重画图形_Java_Swing_Jpanel_Graphics2d - Fatal编程技术网

用Java重画图形

用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

我刚刚开始学习Java中的图形,我遇到了一个问题。我创建了一个带有JPanel面板的JFrame窗口(NetBeans设计器),并在其上绘制了一些图形。然后我添加了一个JButton,它改变了一个变量,这将改变一个正方形在JPanel上的X位置

按下按钮时,此代码将执行:

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