2010-07-02 4 views
0

안녕하세요,null 개체에 대한 JComboBox.addItem

저는 사용자 지정 개체 항목을 추가 할 JComboBox가 있습니다. 그러나 때때로 추가 된 객체는 비어 있습니다. 따라서 comboBox에 빈 항목이 있으면 콤보 상자가 매우 얇아집니다. 그러나 일단 인구가 많아지면 골격 높이가됩니다. 누군가 항목이나 빈 항목이 추가되지 않은 경우에도 JComboBox의 높이를 유지하기 위해 semething을 제안 할 수 있습니까?

개인 최종 JComboBox comboField = 새 JComboBox(); comboField.removeAllItems(); comboField.addItem (getFirstConfig()); comboField.addItem (getSecConfig());

감사합니다.

+0

빈 모델을 사용해도 "얇은"콤보 상자를 본 적이 없습니다. 문제를 나타내는 SSCCE (http://sscce.org)를 게시하십시오. – camickr

+0

혹시 GroupLayout을 사용하고 있습니까? –

답변

0

Jcombobox에 대한 옵션이 Null 인 경우 빈 문자열 ""을 추가했는지 확인했습니다. 이렇게하면 ComboBox가 접히지 않습니다.

0

당신은 드롭 다운 목록이나 상자 자체에 대해 이야기하고 있습니까? 상자에 불과하다면 최소 높이를 설정할 수 없습니까?

업데이트 : 귀하의 의견에 따라, 나는 그것을 실험 해 보았습니다. 사용중인 레이아웃 관리자에 따라 구성 요소 크기의 동작이 다릅니다. 한 가지 방법은 아래에 표시된 것처럼 흐름 레이아웃 패널에 콤보 상자를 래핑하고 기본 크기를 설정하는 것입니다. 그래도 여전히 도움이되지 않으면 레이아웃 관리자가 무엇인지 말해주십시오.

코드 (실행 데모) :

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

public class JComboBoxTest { 
    private static JComboBox combo; 
    private static String[] labelStrs = new String[5]; 

    private static void createAndShowGUI() { 
     final JFrame frame = new JFrame("test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     for (int i = 0; i < 5; i += 1) { 
      labelStrs[i] = "I am label #" + i; 
     } 

     combo = new JComboBox(labelStrs); 

     //------------------------------------------------ 
     combo.setPreferredSize(new Dimension(100, 20)); 
     //------------------------------------------------ 

     JButton remove = new JButton("remove"); 
     remove.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       combo.removeAllItems(); 
       frame.repaint(); 
      } 
     }); 

     JButton add = new JButton("add"); 
     add.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < 5; i += 1) { 
        combo.addItem(labelStrs[i]); 
       } 
       frame.repaint(); 
      } 
     }); 

     Panel container = new Panel(); 
     Panel wrapper = new Panel(); 
     Panel btns = new Panel(); 

     container.setLayout(new FlowLayout()); 
     container.add(combo); 
     wrapper.add(container); 
     btns.add(remove); 
     btns.add(add); 

     frame.getContentPane().setLayout(new BorderLayout()); 
     frame.getContentPane().add(wrapper, BorderLayout.CENTER); 
     frame.getContentPane().add(btns, BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

옵션이 null의 경우에 축소되는 실제의 JComboBox 자체입니다. 최소한의 높이 설정도 시도했지만 그 중 아무 것도 작동하지 않습니다. –

1

당신은 최소 크기를 설정하여 그것을 할 수 있지만, 올바른 값은 글꼴 따라 달라집니다. 값을 추측하거나 의 도움을 받아 addNotify에서 설정할 수 있습니다.

나는 일반적으로 첫 번째 항목을 "- 선택 구성 -"으로 선택하거나 선택할 항목이 없다는 것을 알고있는 경우 더 쉽게 수행 할 수 있음을 발견했습니다. "- 사용할 수있는 구성 없음 - "

업데이트 : 당신이 자리를 사용할 수 없기 때문에

, 당신의 대안이 레이아웃 매니저 및 사용에 LAF에 따라 달라집니다.

주로 JComponent의 최소 및/또는 권장 크기를 설정합니다. 그것은 정확하지만 나는 일반적으로 GridBagLayout을 사용하고이 방법으로 좋은 결과를 가지고 :

@Override 
    public void addNotify() { 
     super.addNotify(); 
     combo.setMinimumSize(atLeast(combo.getMinimumSize(), 100, 20)); 
     combo.setPreferredSize(atLeast(combo.getPreferredSize(), 100, 20)); 
    } 

    private Dimension atLeast(Dimension d, int minWidth, int minHeight) { 
     d.width = Math.max(minWidth, d.width); 
     d.height = Math.max(minHeight, d.height); 
     return d; 
    } 

당신을 위해 작동 최소 값으로 100,20를 교체합니다.

+0

불행하게도 anysuch 옵션을 사용하지 않는 클라이언트 지침에 따라 --SelectConfig--를 추가하는 것에 동의합니다. DefaultComboBoxModel을 사용하면 가능한 해결책이 될 수 있을까요 ?? 감사합니다. –