2014-12-15 4 views
6

Я искал все проблемы, подобные этому, но я не мог найти решение.java необоснованный вопрос по размеру 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 и occtext чрезвычайно малы. Я пробовал новый JTextField (20) и строчную версию, Я попробовал setPreferredSize как выше класс, , а также я попробовал setColumn, но ни один из них не работает.

ответ

6

Избавьтесь от setPreferredSize(dim);. Позвольте самому графическому пользовательскому интерфейсу вызывать pack() в окне верхнего уровня, и ваша проблема, скорее всего, исчезнет. Вы ограничиваете размер контейнера, который может быть меньше, чем лучше для него, и тем самым GridBagLayout затем сгладит его компоненты, в том числе ваши JTextFields, плохим образом.

+0

Вау, он работал достаточно хорошо, спасибо за внимание. –

+1

@VivianMaya: рад, что это помогло. Чтобы увидеть это в действии, просто измените размер своего графического интерфейса с помощью JPanel выше в нем с помощью мыши и посмотрите, как ваши JTextFields сжимаются, но затем в некоторых критических размерах становятся очень маленькими и непригодными для использования. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^