2014-12-15 11 views
6

나는 이와 같은 모든 문제를 검색했지만 해결책을 찾지 못했습니다.java unreasonable jtextfield 크기 조정

public class FormPanel extends JPanel 
{ 
    private JLabel namelabel; 
    private JLabel occlabel; 
    private JTextField nametext; 
    private JTextField occtext; 
    private JButton okButton; 

    public FormPanel() { 
     Dimension dim = getPreferredSize(); 
     dim.width = 250; 
     setPreferredSize(dim); 
     namelabel = new JLabel("Name : "); 
     occlabel = new JLabel("Occupation : "); 
     nametext = new JTextField(); 
     nametext.setPreferredSize(new Dimension(80,20)); 
     occtext = new JTextField(); 
     occtext.setColumns(20); 
     okButton = new JButton("OK"); 

     Border inner = BorderFactory.createTitledBorder("Add Person : "); 
     Border outer = BorderFactory.createEmptyBorder(5,5,5,5); 

     setBorder(BorderFactory.createCompoundBorder(inner,outer)); 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gc = new GridBagConstraints(); 
     gc.gridx = 0; 
     gc.gridy = 0; 
     gc.weightx = 1; 
     gc.weighty = 1; 
     gc.fill = GridBagConstraints.NONE; 

     add(namelabel,gc); 
     gc.gridx = 1; 
     gc.gridy = 0; 
     add(nametext,gc); 

     gc.gridy = 1; 
     gc.gridx = 0; 
     add(occlabel,gc); 

     gc.gridy = 1; 
     gc.gridx = 1; 
     add(occtext,gc); 

     gc.gridy = 2; 
     gc.gridx = 1; 
     add(okButton,gc); 

    } 
} 

nametextocctext은 매우 작다. 새로운 JTextField (20) 및 문자열 버전을 시도했습니다 위의 클래스와 마찬가지로 setPreferredSize를 시도했습니다. 또한 setColumn을 시도했지만 그 중 아무 것도 작동하지 않습니다.

답변

6

setPreferredSize(dim);을 제거하십시오. 최상위 창에서 pack()을 호출하여 GUI 크기를 스스로 결정하면 문제가 해결 될 것입니다. 컨테이너의 크기를 가장 작은 크기로 제한하고 있으므로 GridBagLayout은 JTextFields를 포함한 구성 요소를 나쁜 방식으로 축소합니다.

+0

와우, 아주 잘 작동 했으므로주의 해 주시기 바랍니다. –

+1

@VivianMaya : 기꺼이 도와 줬습니다. 이것을 실제로 보려면, 위의 JPanel을 마우스로 사용하여 GUI의 크기를 다시 조정하고 JTextField가 축소되는 것을 지켜보십시오. 그러나 일부 중요한 크기에서는 매우 작아지고 사용할 수 없게됩니다. –

0

pack()을 사용하는 경우 dim.height을 설정하는 것이 좋습니다.

Dimension dim = getPreferredSize(); 
dim.width = 500; 
dim.height = 200; 
setPreferredSize(dim); 

namelabel = new JLabel("Name : "); 
nametext = new JTextField(); 

occlabel = new JLabel("Occupation : "); 
occtext = new JTextField(); 

okButton = new JButton("OK"); 

Border inner = BorderFactory.createTitledBorder("Add Person : "); 
Border outer = BorderFactory.createEmptyBorder(5, 5, 5, 5); 
setBorder(BorderFactory.createCompoundBorder(inner, outer)); 

GridBagLayout gl = new GridBagLayout(); 
GridBagConstraints gc = new GridBagConstraints(); 
setLayout(gl); 

gc.fill = GridBagConstraints.HORIZONTAL; 
gc.gridwidth = 1; 
add(namelabel, gc); 

gc.gridy = 1; 
add(occlabel, gc); 

gc.gridx = 1; 
gc.gridy = 0; 
gc.weightx = .5; 
add(nametext, gc); 

gc.gridy = 1; 
add(occtext, gc); 

gc.fill = GridBagConstraints.NONE; 
gc.anchor = GridBagConstraints.EAST; 
gc.gridy = 2; 
gc.gridx = 1; 
gc.weightx = 0; 
gc.insets = new Insets(10,0,0,0); 
add(okButton, gc);