JComboBox宽度

18

我创建了一个jComboBox,但它占据了整个框架的宽度。如何设置宽度为固定值。

是使用BorderLayout布局管理器来管理框架和BoxLayout布局管理器来管理面板的。我在此处添加了代码:

import javax.swing.*;
import java.awt.BorderLayout;

public class Window8  {

    JFrame frame;
    JPanel panel;
    JComboBox combo;
    public void go(){

    String[] option = { "STUDENT", "TEACHER" };

    combo.setPreferredSize(new Dimension(1,25));
    combo = new JComboBox(option);
    menu.setSelectedIndex(0);

    frame = new JFrame("DELETION"); 
    frame.setLocationRelativeTo(null);
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    panel = new JPanel();
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));

    frame.getContentPane().add(BorderLayout.NORTH,panel);
    panel.add(combo);   
}

我已经添加了我的代码,请查看它。 - Suman.hassan95
重新格式化的代码,已经进行了复审,请在有错的情况下恢复。 - trashgod
6个回答

30

宽度会自动根据添加到组合框中的最大项的宽度确定。您可以使用以下方法控制显示:

comboBox.setPrototypeDisplayValue("text here");

您也可以考虑使用组合框弹出窗口来控制弹出窗口的大小。

编辑:

由于您添加了展示您正在使用 BoxLayout 的代码,您可以尝试以下操作:

comboBox.setMaximumSize( comboBox.getPreferredSize() );

或者你可以这样做:

JPanel wrapper = new JPanel();
wrapper.add( comboBox );
panel.add( wrapper );

阅读 Swing 教程中关于使用布局管理器部分,以了解这些建议是如何工作的。


1
使用带有敏感选项的 setPrototypeDisplayValue 可以帮助正确调整 JComboBox 的大小,同时允许它根据容器定义具有不同的大小。谢谢! - Alfabravo

4

尝试使用comboBox.setPreferredWidth(200)或其他值来设置宽度。

jzd是正确的。实际的API是setPreferredSize(new Dimension(...));


我尝试了但是出现了这个错误。"setPreferredWidth(int)方法在JComboBox类型中未定义"。 - Suman.hassan95
2
在API中查找,确切的方法是:setPreferredSize(Dimension preferredSize)。 - jzd

1

以下是使用盒式布局的一些操作:

  • 将轴线更改为线性轴线,添加
  • 水平粘合剂,添加刚性区域,
  • 放置组件。

下面是代码片段:

panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(Box.createRigidArea(new Dimension(10, 0)));
panel.add(combo);
frame.getContentPane().add(BorderLayout.NORTH, panel);

1

使用不同的LayoutManager。尝试使用FlowLayout


1
宽度将根据内容自动确定,或使用setPreferredSize()或camickr的建议。但如果将其放入拉伸布局中,则不会有影响。 - jzd

1
您可能想要使用 setSize() 方法。
combo.setSize(200, combo.getPreferredSize().height);

-1

不要使用 JCombobox<>(),而是使用 Combobox<>(),这样宽度就不会改变,如果您设置了首选大小,它也不会随着 Combobox 改变,因此请使用这个。


2
“ComboBox” 是一个重量级的 AWT 组件。AWT 组件和 Swing 组件并不总是能够很好地协同工作。 - Gilbert Le Blanc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接