当我将一个尺寸应为(300,300)的JPanel添加到我的主JFrame时,整个JFrame是(300,300),这不应该是。 JPanel本身应该是(300,300)。
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Tester extends JFrame {
public Tester() {
this.getContentPane().add(new Window());
this.pack();
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
formMouseClicked(evt);
}
});
}
private void formMouseClicked(java.awt.event.MouseEvent evt) {
System.out.println("x: " + evt.getX() + ", y: " + evt.getY());
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Tester().setVisible(true);
}
});
}
public class Window extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
}
}
答案 0 :(得分:1)
整个JFrame是(300,300),不应该是。
为什么这么说?如果单击右下角,则会看到大于300的值。
也许你想要的是:
//this.getContentPane().add(new Window());
JPanel panel = new Window();
this.getContentPane().add(panel);
this.pack();
//addMouseListener(new java.awt.event.MouseAdapter() {
panel.addMouseListener(new java.awt.event.MouseAdapter() {
现在所有鼠标点都相对于面板。
答案 1 :(得分:1)
JFrame
的默认布局为BorderLayout
,当您添加组件而未指定区域时,默认情况下会显示center
区域和中心区域不尊重其组件的首选大小。
关于框架的大小,pack方法根据内部组件的首选大小计算它。