- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我对 GUI 很陌生,遇到了一个问题,无论我将首选大小设置为(通过 setPreferredSize(new Dimension(width, height))
)它都会添加 10
宽度和高度。我想知道,为什么会这样?是的,我知道这是“首选尺寸”,但肯定有办法防止这种情况发生。在将它传递给方法之前,我可以通过简单地从宽度和高度中减去 10
来修复它,但我想知道发生了什么。
我的(相关)代码:
主要方法:
public static void main(String[] args)
{
final App app = new App(500, 500);
JFrame frame = new JFrame("Block Stacker 3000");
frame.getContentPane().add(app);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
System.out.println(app.getSize());
app.start();
}
应用程序构造函数(扩展 JPanel):
public App(int width, int height)
{
this.width = width;
this.height = height;
System.out.println(width + " " + height);
setPreferredSize(new Dimension(width , height));
setBackground(Color.CYAN);
}
运行时输出如下:
500 500
java.awt.Dimension[width=510,height=510]
另外,我尝试过使用 setMinimumSize()
和 setMaximumSize()
但都没有真正影响到任何东西。
最佳答案
JPanel
的大小将由处理其容器中组件的布局管理器决定。 JFrame
有一个默认的布局管理器,所以即使您没有设置它也有一个。有些布局管理器会注意首选尺寸,有些则不会,有些则比其他人更关注最小/最大尺寸。
您可以设置一个“空布局管理器”,也称为“绝对定位”,并自己控制所有尺寸,但我认为您不会尝试这样做(因为您设置的是“首选”尺寸).在设计 UI 时,您需要做的是弄清楚您希望事物具有的相对大小和位置,以及当窗口大小发生变化时您希望它们发生什么;确定哪些布局管理器进入和进入哪些容器面板以及包含它们的容器面板等。
我不会消除 frame.pack();
它本质上告诉布局管理器做它的事情,你通常希望布局管理器在你设置好之后处理事情你想要的方式......
关于java - 是什么压倒了我的首选尺寸? (J面板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150897/
我想知道,在设计一个供其他人使用的框架时,类有一些功能作为默认行为,并希望其客户在必要时覆盖它,这是否会让人皱眉。一个例子如下: public class RecordProcessor {
我是一名优秀的程序员,十分优秀!