Java 如何动态居中图形

Java 如何动态居中图形,java,graphics,center,Java,Graphics,Center,尽管在本例中,X-Y值是硬编码的,但假设用户动态输入值,然后单击按钮在屏幕上查看结果 基于最大尺寸计算帧是没有意义的,因为帧对于监视器来说太大了 获取输入的X-Y值(无论大小)并使图像在帧内居中显示需要什么 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Area; import java.a

尽管在本例中,X-Y值是硬编码的,但假设用户动态输入值,然后单击按钮在屏幕上查看结果

基于最大尺寸计算帧是没有意义的,因为帧对于监视器来说太大了

获取输入的X-Y值(无论大小)并使图像在帧内居中显示需要什么

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Area;
import java.awt.geom.Path2D;

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

public class ZoomToXY extends JPanel 
{
    int x = 0;
    public void paint(Graphics g) 
    {
        //Can't see this. 
        int[] xs2 = {5308,  5306, 4143, 4143, 4120, 4119, 4118, 4117, 4116, 4114, 4112};
        int[] ys2 = {4474,  5329, 5306, 5171, 5171, 5173, 5175, 5177, 5179, 5181, 5182};

        BasicStroke traceStroke = new BasicStroke (1);  //Line thickness
        Graphics2D gc = (Graphics2D) g.create();

        gc.setColor(Color.RED);
        gc.drawPolyline(xs2, ys2, 11);
        gc.setStroke(traceStroke);
        x++;
    }

    public static void main(String[] args) 
    {
        JFrame frame = new JFrame();
        frame.add(new ZoomToXY());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(20,20, 250,250);
        frame.setVisible(true);
    }
}

我们看不到多边形或你正在做的任何东西的原因是因为它在帧的边界之外。让我们看一下。

frame.setBounds(20,20, 250,250);
这条线表示我们将只看到这些边界内的内容,尽管外部的所有内容也将被绘制,但不会显示。尝试在边界内绘制一个矩形,然后查看

g.fillRect(20, 20, 100, 100);
您将看到一个矩形。但我怎样才能解决这个问题呢?由于5000px x 5000px的帧在大多数监视器上不起作用,因此,要么使用较小的分辨率,因此坐标较小,要么使用相机。有了相机,你可以拥有你想要的大世界,并且可以在里面走动。但是如果你的帧只能显示100个像素,而你的多边形是1000px,我们只能看到它的10%,这个问题很容易解决。下面是一个如何实现游戏摄像头的示例。使用gameCamera,您可以简单地计算图像的中心,然后进行转换,非常简单。如果你需要帮助,尽管问

一个250x250的框架很小,认为它有点大。还有,为什么要将坐标设置为(20,20)?如果要将JFrame置于当前监视器的中心,只需调用:

frame.setLocationRelativeTo(null);

您应该使用JPanel的paintComponent方法进行绘制。你必须找到最大的X或Y值,并缩小你的X和Y值以适应绘图区域。谢谢你的帖子。我需要的是翻译命令。