如何动态居中图形

Posted

技术标签:

【中文标题】如何动态居中图形【英文标题】:How to dynamically center a Graphic 【发布时间】:2017-03-30 17:02:25 【问题描述】:

虽然在本例中,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);
    

【问题讨论】:

您应该使用JPanel 的paintComponent 方法进行绘制。您必须找到最大的 X 或 Y 值,并按比例缩小 X 和 Y 值以适合绘图区域。 【参考方案1】:

我们看不到多边形或您正在制作的任何东西的原因是因为它超出了框架的范围。一起来看看吧。

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

这条线表示我们只会看到这些边界内的内容,尽管外面的所有内容也将被绘制但不显示。尝试在边界内绘制一个矩形并查看。

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

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

250x250 的框架非常小,可以考虑大一点。另外为什么将坐标设置为 (20, 20)?如果您想将 JFrame 置于当前监视器的中心,只需调用:

frame.setLocationRelativeTo(null);

【讨论】:

感谢您的帖子。这是我需要的翻译命令。

以上是关于如何动态居中图形的主要内容,如果未能解决你的问题,请参考以下文章

如何将多行文本字段(动态、文本居中)垂直居中到另一个 MovieClip?

如何以动态宽度水平居中collectionView项目?

如何在动态高度 div 中垂直居中文本?

如何使具有动态或静态内容的 div 居中?

如何在固定高度的div内垂直居中动态高度的图像?

SwiftUI当总内容宽度小于屏幕宽度时,如何在动态水平滚动视图中居中内容