java - JFrame窗口坐标错误

标签 java swing plot graphics 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

关于java - JFrame窗口坐标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51900200/

相关文章:

R:水平图上的叠加图

java - 为什么集合不从排序列表中删除重复项?

java - 如何使用构建器编辑器窗口 eclipse 显示 JTable 中的列名?

r - scale_fill_discrete 和 scale_fill_manual - 图例选项混淆

r - 使用库 emojifont 绘制崩溃 r session

java - 我可以在java中将两个单独的Jframe文件放入一个Jframe文件中吗?

java - 如何获取 AutoCompleteField 中选定的文本并通过帖子将其发送到服务器

java - Android 中的服务器端验证 : asynchronous method called in if statement workaround

java - 表示 JList 中的自定义对象

java - 如何使用鼠标监听器和计时器计算点击次数