2014-12-15 10 views
6

Ho cercato tutti i problemi in questo modo ma non sono riuscito a trovare la soluzione.java irragionevole problema di ridimensionamento di 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 e occtext sono estremamente piccole. Ho provato il nuovo JTextField (20) e la versione di stringa, Ho provato setPreferredSize come sopra la classe, e ho anche provato setColumn ma nessuno di loro funziona.

risposta

6

Sbarazzarsi di setPreferredSize(dim);. Lascia che sia la dimensione della GUI stessa chiamando pack() nella finestra di livello superiore e il problema probabilmente andrà via. Stai vincolando la dimensione del contenitore probabilmente a un valore inferiore a quello che è meglio per esso, e così facendo, GridBagLayout ridurrà i suoi componenti, inclusi i tuoi JTextField, in un modo sbagliato.

+0

wow, ha funzionato abbastanza bene, grazie per la vostra attenzione. –

+1

@VivianMaya: contento che abbia aiutato. Per vedere questo in azione, basta ridimensionare la GUI con JPanel sopra in esso con un mouse e osservare che i JTextFields si restringono, ma a un livello critico diventano molto piccoli e inutilizzabili. –

0

In caso di utilizzo pack() potrebbe essere una buona idea impostare 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); 
Problemi correlati