Java图形无法重新定位矩形

标签 java swing

我正在尝试重新定位一个矩形,但我无法弄清楚为什么它保留在同一位置。 它创建一个红色矩形,但不会改变颜色或移动到新位置。

这是我的代码:

package grap_prj.dom.shenkar;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.concurrent.TimeUnit;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class graphic_main extends JPanel{

static Rectangle rec = new Rectangle ();

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;

    rec.setSize(10, 10);
    rec.setLocation(10, 10);

    g2d.setColor(Color.RED);
    g2d.drawRect((int)rec.getX(),(int)rec.getY(), 10, 10);
    g2d.fillRect((int)rec.getX(),(int)rec.getY(), 10, 10);
}

public static void update_ui (Graphics g)
{
    System.out.println("in update");
    rec.setLocation(50, 50);
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawRect((int)rec.getX(),(int)rec.getY(), 10, 10);
    g2d.fillRect((int)rec.getX(),(int)rec.getY(), 10, 10);  
}

public static void main(String[] args) {

    JFrame frame = new JFrame("Simple Graphics");
    frame.add(new graphic_main());
    frame.setSize(300, 300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    try {
        TimeUnit.SECONDS.sleep(10);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    graphic_main.update_ui(frame.getGraphics());
    frame.revalidate();
 }
}

更新: 我对代码进行了一些更改,但情况仍然相同。我更改了位置,但添加了一个新的矩形,而不是移动现有的矩形。

最佳答案

您不断地将位置设置为 10,10,因此矩形将始终绘制在 10,10。

设置位置 50,50 后,您将不再绘制任何内容。下一步您将再次设置 10,10。

关于Java图形无法重新定位矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261006/

相关文章:

java - 从事 Java GUI/Canvas 项目

java - 在共享首选项中保存 Intent

java - 自定义按钮在 BoxLayout 中时会缩小

java - 如何在 JScrollPane 中隐藏 JScrollBars

java - JRadioButton:如何用 IconImage 替换文本?

java - 在覆盖的 paintComponent(...) 方法中旋转图像

java - 如何在 Spring Boot 中设置 useBodyEncodingForURI ="true"

Java Youtube api 评分评论

java - 如何将 Spring MVC 与 AngularJS ui-router 一起使用?

Java Base64 编码给出与 C base64 编码不同的结果