2014-12-15 19 views
6

Przeszukałem wszystkie problemy, ale nie mogłem znaleźć rozwiązania.java nierozsądne pytanie o rozmiar 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); 

    } 
} 

nametext i occtext są bardzo małe. Próbowałem nowego JTextField (20) i wersji ciąg, Próbowałem setPreferredSize jak wyżej klasy, , a także próbowałem setColumn, ale żaden z nich nie działa.

Odpowiedz

6

Pozbądź się setPreferredSize(dim);. Niech rozmiar GUI sam przez wywołanie pack() w oknie najwyższego poziomu i twój problem prawdopodobnie zniknie. Ograniczasz rozmiar kontenera, który jest prawdopodobnie mniejszy niż jest najlepszy dla niego, a czyniąc to, GridBagLayout następnie zmniejszy jego składniki, w tym JTextFields, w zły sposób.

+0

Wow, działało całkiem dobrze, dziękuję za uwagę. –

+1

@VivianMaya: cieszę się, że pomogło. Aby zobaczyć to w akcji, wystarczy zmienić rozmiar GUI z JPanelem powyżej myszką i obserwować, jak JTextField rośnie, ale w pewnym krytycznym rozmiarze stają się bardzo małe i nie nadają się do użytku. –

0

W przypadku korzystania z usługi pack() może być dobrym pomysłem ustawienie 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);