JFrame窗口坐标错误

时间:2018-08-17 17:18:27

标签: java swing plot graphics jframe

当在JFrame上绘制点时,自然会假设(0,0)对应于选项卡下方可用的左上像素,而(Max_x,Max_y)对应于Frame中的右下像素。但是,似乎(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,从而解决问题?

1 个答案:

答案 0 :(得分:1)

可能是因为您是直接在顶层窗口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