2011-01-07 25 views
11

我已經創建了一個jComboBox,但它需要幀的全部寬度。如何設置寬度固定。JComboBox寬度

yes是用於面板的框架和框佈局的borderlayout。我在此處添加代碼:

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); 
} 
+0

你使用任何佈局? – 2011-01-07 18:40:44

+0

我已添加我的代碼。請看看它。 – 2011-01-07 18:57:16

+0

重新格式化的代碼;編輯修改的;如果不正確請回復。 – trashgod 2011-01-07 20:33:00

回答

16

寬度由添加到組合框的最大項目的寬度自動確定。您可以通過使用控制顯示:

comboBox.setPrototypeDisplayValue("text here"); 

您也可以考慮使用Combo Box Popup來控制彈出大小。

編輯:

既然你添加代碼,顯示你正在使用的BoxLayout你可以嘗試以下方法:

comboBox.setMaximumSize(comboBox.getPreferredSize()); 

或者,你可以這樣做:

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

閱讀請參閱Swing教程Using Layout Managers中的部分,以瞭解這些建議的工作原理。

+0

使用帶有敏感選項的`setPrototypeDisplayValue`有助於正確調整JComboBox的大小,同時允許它根據容器定義具有不同的大小。謝謝! – Alfabravo 2017-11-16 22:02:51

4

嘗試comboBox.setPreferredWidth(200);或其他值來設置寬度

jzd是正確的。實際的API是setPreferredSize(new Dimension(...));

1

使用不同的LayoutManager。試試FlowLayout

0

下面是你可以做的盒子佈局。

  • 更改軸線軸線,添加
  • 水平膠,添加剛性區域,
  • 代替組分

。下面 代碼片段:

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); 
2

你可能想使用setSize()方法。

combo.setSize(200, combo.getPreferredSize().height);