2014-12-15 12 views
6

Tôi đã tìm kiếm tất cả các vấn đề như thế này nhưng tôi không thể tìm thấy giải pháp.java jsextfield sizing vấn đề không hợp lý

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 là vô cùng nhỏ. Tôi đã thử JTextField mới (20) và phiên bản chuỗi, Tôi đã thử setPreferredSize như trên lớp, và tôi cũng đã thử setColumn nhưng không có công cụ nào trong số đó hoạt động.

Trả lời

6

Loại bỏ setPreferredSize(dim);. Hãy để chính kích thước GUI bằng cách gọi pack() trên Cửa sổ cấp cao nhất và sự cố của bạn có thể sẽ biến mất. Bạn đang hạn chế kích thước của vùng chứa có khả năng nhỏ hơn kích thước của nó, và bằng cách làm như vậy, GridBagLayout sẽ thu nhỏ các thành phần của nó, bao gồm cả JTextFields của bạn, theo cách xấu.

+0

wow, Nó hoạt động khá tốt, cảm ơn sự quan tâm của bạn. –

+1

@VivianMaya: vui vì nó đã giúp ích. Để thấy điều này trong hành động, chỉ cần kích thước lại GUI của bạn với JPanel ở trên bằng chuột và xem JTextFields của bạn co lại, nhưng sau đó ở một số kích thước quan trọng, nhận được rất nhỏ và không sử dụng được. –

0

Trong trường hợp bạn đang sử dụng pack(), nên đặt 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);