这是我的代码:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
JPanel jp = new JPanel();
jp.setMinimumSize(new Dimension(200, 200));
jp.setPreferredSize(new Dimension(200, 200));
//frame.getContentPane().setMinimumSize(new Dimension(200, 200));
//frame.getContentPane().setPreferredSize(new Dimension(200, 200));
frame.getContentPane().add(jp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
它的行为正是我想要的方式。用户可以调整大小,JFrame
但它总是足够大以容纳 200px x 200px JPanel
。但是当我删除时:
JFrame.setDefaultLookAndFeelDecorated(true);
用户可以调整JFrame
到任何大小。
为什么默认外观装饰会影响调整大小?我怎样才能使它工作没有setDefaultLookAndFeelDecorated(true)
?我知道我可以手动设置帧最小尺寸 ( JFrame#setMinimumSize(new Dimension dim)
),如果没有更智能的解决方案,我会这样做。
我在 Windows 7 上使用 jdk 1.7。