java - Swing图形重新定位drawString

标签 java swing graphics2d

我正在用户屏幕上绘制一个字符串,我想移动该字符串,但它不会改变位置,这是我的代码

public static int x = 200, y = 200;

    public static Window draw() {
    Window w = new Window(null) {
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            System.out.println("repainting");
            final Font font = getFont().deriveFont(48f);
            g.setFont(font);
            g.setColor(Color.WHITE);
            final String message = "Hello";
            FontMetrics metrics = g.getFontMetrics();
            g.drawString(message, x, y);
        }

        @Override
        public void update(Graphics g) {
            paint(g);
        }
    };
    w.setAlwaysOnTop(true);
    w.setBounds(w.getGraphicsConfiguration().getBounds());
    w.setBackground(new Color(0, true));
    w.setVisible(true);
    return w;
}


  public static void main(String[] args) throws AWTException {
        Window window = draw();
        x = 500;
        y = 500;
        window.repaint();
        window.invalidate();
        }
    }

它似乎没有改变文本位置,它打印出repainting,因此点方法被调用,并且我已经在绘图内打印了x, y方法,而且似乎也更新了,所以图形有问题,不想绘制新的字符串。

最佳答案

只需完全删除 Window 类并将其替换为 JFrame 即可。那么自定义类应该是 JPanel 并且只需重写paintComponent。我猜它不起作用,所以你要经历一些事情才能使它起作用,并且最终得到了一些非常狡猾的代码。

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import javax.swing.Timer;
import java.awt.EventQueue;

public class Confusion{
    static int x = 100;
    static int y = 0;
    static double theta = 0;

    public static void startGui(){
        JFrame frame = new JFrame("title");

        JPanel panel = new JPanel(){
            public void paintComponent(Graphics g){
                g.drawString("string", x, y);
            }
        };
        frame.setSize(640, 480);
        frame.add(panel);
        frame.setVisible(true);
        Timer timer = new Timer( 30, (e)->{
            x = (int)(300 + Math.sin(theta)*200);
            y = (int)(300 - Math.cos(theta)*200);
            theta += 0.1;
            panel.repaint();        
        } );
        timer.start();
    }
    public static void main(String[] args) throws Exception {
        EventQueue.invokeAndWait( Confusion::startGui );   
    }
}

关于java - Swing图形重新定位drawString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60825482/

相关文章:

java - SingleFileStore [Infinispan][Adv​​ancedLoadWriteStore]

java - 当另一个应用程序处于 Activity 状态时使用 java Robot

Java - 双缓冲NullPointerException

java - 使用 Graphics2D 绘制时矩形的实际边界

java - Graphics2D 在定义的四边形内部绘制图像

java - 如何在 Java 中实现非阻塞 Future

Java 匿名类效率影响

java - org.mockito.exceptions.misusing.NotAMockException

java - JDialog 不会显示在设计选项卡中

Java Swing - 我需要将输入数字转换为 HH :MM format 中的分钟和秒