嗨,我正在使用 setBounds 方法打开一个特定大小的窗口。但是我在参数中传递的大小是窗口的大小,包括框架的条。如何仅为内容设置尺寸?
问问题
7853 次
2 回答
2
设置内容的大小,然后在 JFrame 上调用 pack()。
编辑:因为 Guillaume Polet 不会停止让我伤心,这是一个完整的工作示例。请注意您根本不需要(错误)使用继承,并且它可以用更少的行完成工作:
import java.awt.Dimension;
import javax.swing.JFrame;
public class Main {
public static void main(String... args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setPreferredSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
}
}
于 2015-05-11T14:21:36.170 回答
1
有两种方法可以解决此问题:
- 设置边框的边界时要考虑边框的边界
- 覆盖
getPreferredSize()
内容窗格,JFrame
然后调用pack()
框架。
下面是这两种技术的演示:
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test {
protected void initUI() {
JFrame frame = new JFrame("Insets technique");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Insets i = frame.getInsets();
System.out.println(i);
Rectangle bounds = new Rectangle(50, 100, 400, 500);
bounds.width += i.right + i.left;
bounds.height += i.bottom + i.top;
frame.setBounds(bounds);
}
protected void initUI2() {
JFrame frame = new JFrame("Preferred size technique");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 500);
}
});
frame.pack();
frame.setLocation(50, 100);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Test test = new Test();
test.initUI();
test.initUI2();
}
});
}
}
于 2015-05-11T18:17:32.187 回答