java - 在 JFrame 中使用坐标平面

标签 java swing jframe awt coordinates

//我正在尝试学习如何在 java 中绘制对象。我在这方面做得越来越好,但是一旦我在屏幕上看到图像,我就很难操纵它。我输入的数字对形状的结果没有意义。至少对我来说他们没有。在代数中,如果你在 x 轴上增加一个数字,它会向右移动,如果你在 y 轴上增加一个数字,它会向上移动。那不是这里发生的事情。谁能向我解释这是如何工作的?我还是 java 的新手,所以解释和细节越多越好。我试图在暑假期间每天抽出几个小时来学习 Java,但有时这会让人有些沮丧。非常感谢任何帮助。

最佳答案

这里的坐标从屏幕的TOP LEFT SIDE开始,当你增加X的值时,你会移动朝向 RIGHT SIDE,尽管随着您增加 Y 的值,您将移动 DOWNWARDS。这里有一个小示例程序,可以让您更好地理解这一点,只需在任意位置单击它即可。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DrawingExample
{
    private int x;
    private int y;
    private String text;
    private DrawingBase canvas;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Drawing Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        canvas = new DrawingBase();
        canvas.addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent me)
            {
                text = "X : " + me.getX() + " Y : " + me.getY();
                x = me.getX();
                y = me.getY();
                canvas.setValues(text, x, y);
            }
        }); 

        frame.setContentPane(canvas);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new DrawingExample().displayGUI();
            }
        });
    }
}

class DrawingBase extends JPanel
{
    private String clickedAt = "";
    private int x = 0;
    private int y = 0;

    public void setValues(String text, int x, int y)
    {
        clickedAt = text;
        this.x = x;
        this.y = y;
        repaint();
    }

    public Dimension getPreferredSize()
    {
        return (new Dimension(500, 400));
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawString(clickedAt, x, y);
    }
}

关于java - 在 JFrame 中使用坐标平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809514/

相关文章:

java - 多个相似面板

java - 解析 http GET 响应体

java - 什么是NullPointerException,我该如何解决?

java - 创建多线程循环

java - 向 GUI Java 添加框架

java - JFrame 文本显示错误

java - 在关闭 JFrame 之前我将如何执行函数

java - 创建一个具有可执行类文件的 uberjar

java - 从 JFrame 调整 JPanel 的大小

java - 动态按钮单击更新其他 JButton