当在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);
}
}
我得到以下内容
我们可以看到,该行的左上角被遮盖了。我该如何纠正? -特别是如何计算标签下方最上方像素的像素坐标? -更一般地说,是否可以首先显示不带选项卡的JFrame,从而解决问题?
答案 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());
}
}
}
输出: