我有一个简单的GUI,使用了
我在Mac OS X 10.8 (Java 6)和Ubuntu 3.2.8 (Java 6)上进行了测试,并观察到同样的问题。如何防止框架调整大小以覆盖任何按钮?更普遍地说,如何使
注意:我查看了此相关问题,但它似乎没有回答我的问题。
GridBagLayout
,顶部是一个按钮面板,下方是一个自定义可调整大小的组件,如下图所示:
import javax.swing.*;
import java.awt.*;
public class Example {
public static void main(String[] args) {
// Setup JFrame and GridBagLayout.
JFrame frame = new JFrame("Example");
Container contentPane = frame.getContentPane();
GridBagLayout layout = new GridBagLayout();
contentPane.setLayout(layout);
layout.rowWeights = new double[] {0.0, 1.0};
layout.columnWeights = new double[] {1.0};
GridBagConstraints cons = new GridBagConstraints();
// Add button panel with a BoxLayout.
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(new JButton("Button 1"));
panel.add(new JButton("Button 2"));
panel.add(new JButton("Button 3"));
cons.anchor = GridBagConstraints.NORTHWEST;
cons.gridx = 0;
cons.gridy = 0;
layout.setConstraints(panel, cons);
contentPane.add(panel);
// Add custom component, resizable.
JComponent custom = new JComponent() {
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
public Dimension getMinimumSize() {
return new Dimension(40, 30);
}
public void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
};
cons.gridx = 0;
cons.gridy = 1;
cons.fill = GridBagConstraints.BOTH;
layout.setConstraints(custom, cons);
contentPane.add(custom);
// Pack and show frame.
frame.pack();
frame.setVisible(true);
}
}
我在Mac OS X 10.8 (Java 6)和Ubuntu 3.2.8 (Java 6)上进行了测试,并观察到同样的问题。如何防止框架调整大小以覆盖任何按钮?更普遍地说,如何使
GridBagLayout
实际尊重组件的最小尺寸?当我打印出我的框架的最小尺寸时,我得到了(291, 81)
,这正是我想要的,但当我调整框架的大小时,它超过了这个值。注意:我查看了此相关问题,但它似乎没有回答我的问题。
frame.getMinimumSize()
返回正确的最小大小而无需进行任何操作。然而,在调整框架大小时似乎并未强制执行此最小大小。 - DanielGibbsframe.setMinimumSize(frame.getContentPane().getMinimumSize());
它似乎可以工作。 - MadProgrammer