2011-05-03 3 views
1

궁금 해서요 을 나는 다음과 같은 코드 조각이 있습니다.Java ComboBox의 너비를 JPanel만큼 넓게 설정하는 방법은 무엇입니까? 이 글은 년대 JPanel의 한 넓게 콤보 상자 '너비를 설정하는 방법이 있는지

public newPanel() { 
     setLayout(new GridLayout(2,0)); 

     String[] example = new String[] {"one, "two", "three", "four"}; 

     JComboBox cBox = new JComboBox(levels); 
     cBox.setPreferredSize(new Dimension(300, 20)); 

     this.add(new JLabel("This is text that goes above the ComboBox:")); 
     this.add(cBox); 
    } 

당신은 내가 콤보를 원했다 볼 수 있습니다 300px 너비가 될 수 있지만 자동으로 패널을 넓게 설정하는 방법이 있습니까? cBox.setPreferredWidth (max)와 비슷한 것; (나는 그것이 존재하지 않는다는 것을 안다, 그것은 생각의 나의 길을 보여주기위한 것이다).

감사합니다.

답변

2

거기에있는 패널만큼 자동으로 넓게 설정하는 방법은 무엇입니까?

아마도 레이아웃 관리자가이 문제를 처리하도록 할 수 있습니다.

에 너비를 설정하지 않으면 GridLayout은 전체 패널을 수평으로 채우게됩니다. 이 당신을 위해 충분히 유연하지 않으면

enter image description here

에서

이 조각 ...

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

class Test { 
    public static void main(String[] args) { 

     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(2,0)); 

     String[] example = new String[] {"one", "two", "three", "four"}; 

     JComboBox cBox = new JComboBox(example); 
     //cBox.setPreferredSize(new Dimension(300, 20)); 

     panel.add(new JLabel("This is text that goes above the ComboBox:")); 
     panel.add(cBox); 
     panel.setBorder(BorderFactory.createTitledBorder("Panel border")); 

     frame.setContentPane(panel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

... 결과는, 난 당신이 GridBagLayout를 사용하는 것이 좋습니다.

1

당신은 수평 제약 조건을 채우는과 레이아웃 매니저로 GridBagLayout을 사용할 수

this.setLayout(new GridBagLayout()); 
this.add(cBox,new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); 
1

당신이 BoxLayout가를 사용하여 위에서 아래로 요소를 표시하는 그것을 할 수 있습니다. 자동으로 최대 크기를 사용합니다

당신은 더 깊이 이해하고 싶다면 것을 볼 수 있습니다

: http://blogs.oracle.com/CoreJavaTechTips/entry/getting_to_know_boxlayout

class newPanel extends JPanel{ 
     public newPanel(){ 
      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

      String[] levels = new String[] {"one", "two", "three", "four"}; 

      JComboBox cBox = new JComboBox(levels); 
      //cBox.setPreferredSize(new Dimension(300, 20)); 

      add(new JLabel("This is text that goes above the ComboBox:")); 
      add(cBox); 
     } 
    } 
1

어떤 다른 사람이 이미 지적했듯이, 콤보 상자가 공간을 채우기함으로써 지원 여러 LayoutManager. 정확한 동작은 구체적인 관리자의 재량에 달려 있습니다. 그들이하는 일을 배우는 방법이 없습니다. :-) 그런 다음 원하는 행동을 결정하고 적합한 타사 LayoutManager가 있다는 것을 잊지 말고 적절한 행동을 선택하십시오.

약간의 추측 : comboBox를 전체 너비까지 확장하고 프레임 높이를 늘리면 높이를 "합리적인"한 줄로 유지하려고합니다. BoxLayout은 코드에서 약간의 도움을 받아이를 수행 할 수 있습니다. 컴포넌트의 최대 힌트를 존중합니다. 일부 구성 요소 (예 : JLabel)는 합리적인 것을 반환하고 다른 구성 요소 (JComboBox 등)는 반환하지 않습니다.

다음은 comboBox에 최대 크기를 추가하는 스 니펫입니다.

JComponent panel = new JPanel(); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 

    String[] levels = new String[] { "one", "two", "three", "four" }; 

    JComboBox cBox = new JComboBox(levels) { 

     @Override 
     public Dimension getMaximumSize() { 
      Dimension dim = super.getMaximumSize(); 
      dim.height = getPreferredSize().height; 
      return dim; 
     } 

    }; 

    panel.add(new JLabel("This is text that goes above the ComboBox:")); 
    panel.add(cBox); 
관련 문제