为什么我的坐标不符合我的JFrame大小?

我想在JPanel中做一些绘图但是封闭的JFrame大小似乎与我要求绘制坐标的位置不匹配。

在我的示例代码中,JFrame大小设置为(700,700),最后一个点绘制在(600,600)。 我希望这个点可以从右边和底边画100个像素,但它不是(请看截图)。

替代文字

这是我正在使用的代码:

import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Scratch extends JPanel { static int frameWidth = 700; static int frameHeight = 700; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(frameWidth, frameHeight); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Scratch scratch = new Scratch(); frame.getContentPane().add(scratch); frame.setVisible(true); } @Override public void paintComponent(Graphics g) { g.drawRect(100, 100, 1, 1); g.drawString("100", 100, 100); g.drawRect(200, 200, 1, 1); g.drawString("200", 200, 200); g.drawRect(300, 300, 1, 1); g.drawString("300", 300, 300); g.drawRect(400, 400, 1, 1); g.drawString("400", 400, 400); g.drawRect(500, 500, 1, 1); g.drawString("500", 500, 500); g.drawRect(600, 600, 1, 1); g.drawString("600", 600, 600); } } 

只是一个猜测:

 public class Scratch extends JPanel { static int frameWidth = 700; static int frameHeight = 700; public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Scratch scratch = new Scratch(); scratch.setSize(frameWidth, frameHeight); frame.getContentPane().add(scratch); frame.pack(); frame.setVisible(true); } 

如果包含窗口装饰,您的JFrame可能是700×700。 由于paintComponent()方法属于JFrame内的面板,因此将使用面板左上角的原点绘制所有项目,而不是JFrame的左上角。

可能的解决方法是使面板700×700并使JFrame相应resize。