JFrame窗口坐标错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JFrame窗口坐标错误相关的知识,希望对你有一定的参考价值。

当在JFrame上绘制点时,可以自然地假设(0,0)对应于选项卡下方可用的左上角像素,并且(Max_x,Max_y)对应于帧中的右下角像素。但是,似乎(0,0)实际上隐藏在选项卡所在的区域中。例如,如果我编写以下代码在左上角和右下角之间绘制对角线,

import java.awt.Graphics;
import javax.swing.JFrame;

public class Test extends JFrame{


    public Test() { 
        setSize(960, 960);
        setTitle("Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);       
    }

    public static void main(String[] args) {
        Test t = new Test();
    }

    public void paint(Graphics g) {
        g.drawLine(0, 0, 960, 960);
    }

}

我得到以下内容

Example

正如我们所看到的,该行的左上角是模糊的。我该如何纠正这个? - 特别是,如何计算选项卡下方最上面像素的像素坐标? - 更一般地说,是否可以在没有选项卡的情况下显示JFrame,从而消除问题?

答案

可能是因为你直接在JFrame上绘制,这是一个顶级窗口,我不认为它以可预测的方式支持自定义绘画,至少这种行为似乎很像你在问题中所描述的那样不稳定。

通常你会使用JPanel并将它放在JFrame中,如下所示:

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

public class Main extends JFrame {

    public Main() {
        setSize(960, 960);
        setTitle("Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setContentPane(new JPanelTest());
    }

    public static void main(String[] args) {
        Main t = new Main();
    }

    class JPanelTest extends JPanel {
        public void paint(Graphics g) {
            g.drawLine(0, 0, this.getWidth(), this.getHeight());
        }
    }

}

输出:

enter image description here

以上是关于JFrame窗口坐标错误的主要内容,如果未能解决你的问题,请参考以下文章

Java - 关闭 JFrame 窗口时的消息

Jpanel 和 Jframe 在运行时分别显示

Java JFrame图形界面 ----一个简单的窗口

Java - Swing - 充满组件的窗口

在 JFrame 窗口的背景中播放音乐

在 JFrame 中生成方波