【发布时间】:2014-01-08 12:21:45
【问题描述】:
如何设置使用GridBagLayout 和fill=HORIZONTAL 的JComboboxs 弹出菜单的固定宽度?
我尝试的其中一件事是重写 getSize() 方法,但不起作用。
public class ComboBoxSize extends JFrame {
public static void main(String args[]) {
// THE COMBOBOX
String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
JComboBox<String> comboBox = new JComboBox<String>(labels) {
public Dimension getSize() {
Dimension d = getPreferredSize();
d.width = 50;
return d;
}
};
comboBox.setMaximumRowCount(comboBox.getModel().getSize());
// ADD COMBOBOX TO PANEL
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
panel.add(comboBox, c);
// ADD PANEL TO FRAME
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
【问题讨论】:
-
大小调整完成后不要忘记调用 pack() 弹出窗口
-
@StanislavL 我认为 Rob 也有很好的解决方法
-
强制宽度的最简单方法是向setPrototypeDisplayValue 传递一个值,这不会让您以像素为单位指定确切的大小,但它更简洁,并且不是很好的 UI 实践无论如何设置组件的大小(以像素为单位)。
-
似乎是重复的。另一个问题在我的示例中运行良好,但不是我的主要项目。似乎问题就在我这边。
标签: java swing layout jcombobox gridbaglayout