我有一个ComponentListener
for main JFrame
,它在调整大小时发送一个事件,但是在触发事件时,Jpanel
已经调整了大小。
public class Test implements ComponentListener {
private JFrame frame;
private JPanel panel;
public Test() {
frame = new JFrame();
panel = new JPanel();
frame.setPreferredSize(new Dimension(300, 300));
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.addComponentListener(this);
frame.pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
Test test = new Test();
test.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void componentResized(ComponentEvent e) {
System.out.println(frame.getSize() + " : " + panel.getSize());
frame.revalidate();
}
@Override
public void componentHidden(ComponentEvent e) {}
@Override
public void componentMoved(ComponentEvent e) {}
@Override
public void componentShown(ComponentEvent e) {}
}
JPanel setSize
在调整大小期间如何控制JFrame
?
编辑:我了解BorderLayout
设置组件来填充边框。它如何设置组件的大小?是在召唤setSize
吗?如果是,为什么调用一个覆盖的 setSize?