2016-11-10 7 views
0

JFormattedTextField 구성 요소를 하나의 열에 포함하고 싶습니다. 왜이 코드가 최대 크기로 확대되는지 이해가 안됩니다.BoxLayout에 대해 JFormattedTextField를 확장하지 못하도록하는 방법은 무엇입니까?

이렇게 멋진 스택으로 만들고 싶습니다.

+0

그냥 레이아웃없이 간단히 추가 할 수 있습니다. 그러나 JTextfield의 길이가 Panel의 크기와 거의 같아야합니다. – Thecarisma

+0

@Thecarisma * "레이아웃없이 간단하게 추가 할 수 있습니다."* 레이아웃 조언은 왜 그런 * 왜 그런 조언이 될 때까지 그만 두십시오! Java GUI는 다른 로케일에서 다른 PLAF를 사용하여 다른 OS, 화면 크기, 화면 해상도 등에서 작동해야합니다. 따라서, 픽셀 완벽한 레이아웃에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [조합] (http://stackoverflow.com/a/5630271/418556)과 [공백] 레이아웃 채우기 및 테두리 (http://stackoverflow.com/a/17874718/)를 사용하십시오. 418556). –

+0

1) 더 나은 도움을 받으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 게시하십시오. 2) ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고 크기를 조정할 수 있으면 더 많은 너비와 높이를 제공하십시오. –

답변

1

BoxLayout은 사용 가능한 공간에 맞게 구성 요소를 늘리는 것 같습니다. 각 구성 요소를 먼저 FlowLayout (이 아닌은 구성 요소를 확장하지 않음)으로 각 구성 요소를 넣은 다음 BoxLayout을 사용하여 해당 패널을 컨테이너에 추가하십시오. E.G. 위에서 언급 한 MCVE의 형태로 :

import java.awt.*; 
import java.text.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class BoxLayoutQuandary { 

    private JComponent ui = null; 

    BoxLayoutQuandary() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(4, 4, 4, 4)); 

     NumberFormat numberFormat = new DecimalFormat("##.#"); 
     // Create the text fields and set them up. 
     JFormattedTextField priemerKolesa = new JFormattedTextField(numberFormat); 
     priemerKolesa.setColumns(8); 
     JFormattedTextField hrubkaNavinu = new JFormattedTextField(numberFormat); 
     hrubkaNavinu.setColumns(6); 
     // Layout the text fields in a panel. 
     JPanel fieldPane = new JPanel(); 
     fieldPane.setLayout(new BoxLayout(fieldPane, BoxLayout.Y_AXIS)); 
     ui.add(fieldPane); 
     JPanel priemerKolesaPanel = new JPanel(); 
     priemerKolesaPanel.add(priemerKolesa); 
     fieldPane.add(priemerKolesaPanel); 
     JPanel hrubkaNavinuPanel = new JPanel(); 
     hrubkaNavinuPanel.add(hrubkaNavinu); 
     fieldPane.add(hrubkaNavinuPanel); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       BoxLayoutQuandary o = new BoxLayoutQuandary(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
}