如何动态居中图形

时间:2016-11-16 13:15:53

标签: 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.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);
    }
}

1 个答案:

答案 0 :(得分:1)

我们无法看到多边形或你正在制作的任何东西的原因是因为它超出了框架的界限。我们来看看。

frame.setBounds(20,20, 250,250);

这一行表示我们只会看到这些边界内的内容,尽管外面的所有内容也会被绘制但未显示。尝试在边界内绘制一个矩形,然后看看。

g.fillRect(20, 20, 100, 100);

你会看到一个矩形。但是我该如何解决这个问题呢?由于具有5000px到5000px的帧不适用于大多数显示器,因此要么使用较小的分辨率,要么使用较小的坐标,要么实现相机。有了相机,你可以拥有你想要的大世界,并能够在其中移动。但是如果你的框架只能显示100个像素而你的多边形是1000px,我们只会看到它的10%,这个问题可以通过zooming轻松解决。这是topic如何实现游戏相机。使用gameCamera,您可以简单地计算图像的中心,然后翻译它,非常简单。如果您需要帮助,请询问。

一个250x250的框架非常小,考虑它要大一点。为什么将坐标设置为(20,20)?如果您想将JFrame集中到当前监视器,只需调用:

frame.setLocationRelativeTo(null);