2014-12-15 44 views
6

Ich habe alle Probleme wie diese gesucht, aber ich konnte die Lösung nicht finden.java unvernünftig jtextfield Sizing Problem

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 und occtext sind extrem klein. Ich habe versucht, neue JTextField (20), und String-Version, Ich versuchte SetPreferredSize wie oben Klasse, und auch ich versuchte SetColumn aber keiner von ihnen funktioniert.

Antwort

6

Befreien Sie sich von setPreferredSize(dim);. Lassen Sie die GUI-Größe sich selbst über den Aufruf pack() auf der obersten Ebene Fenster und Ihr Problem wird wahrscheinlich weggehen. Sie beschränken die Größe des Containers wahrscheinlich auf eine kleinere Größe, als dies am besten ist, und dadurch verkleinert GridBagLayout seine Komponenten, einschließlich Ihrer JTextFields, auf eine schlechte Art und Weise.

+0

wow, es hat ganz gut funktioniert, danke für Ihre Aufmerksamkeit. –

+1

@VivianMaya: Ich bin froh, dass es geholfen hat. Um dies in Aktion zu sehen, skaliere einfach deine GUI mit dem JPanel oben mit der Maus und beobachte, wie deine JTextFields schrumpfen, aber dann bei einer kritischen Größe sehr klein und unbrauchbar werden. –

0

Bei Verwendung von pack() kann es eine gute Idee sein, dim.height einzustellen.

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);