2013-12-11 3 views
0

Я занимаюсь некоторыми материалами GUI, чтобы попрактиковаться в финале, и я думаю, что у меня были основы. Однако каждый раз, когда я пытаюсь добавить JTextField в свой JPanel, мой JButton стирается, и весь интерфейс исчезает. В конечном счете, я хотел, чтобы область текста менялась, когда я нажимал кнопку, но я даже не вижу текстовую область. Я знаю, что я, вероятно, сделал действительно новичковую ошибку, поэтому не убивай меня, пожалуйста. Код ниже не работает, однако, как только я отключу JTextField, он работает нормально.Невозможно добавить JTextfield в JPanel

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 
import javax.swing.JTextField; 

public class test5 { 

    private JFrame f; 
    private JPanel p; 
    private JButton b1; 
    private JTextField jt; 

    public test5() { 
     gui(); 
    } 
    public void gui() { 
     f = new JFrame(); 
     f.setVisible(true); 
     f.setSize(600,400); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     jt = new JTextField(20); 
     jt.setEditable(false); 

     p = new JPanel(); 
     p.setBackground(Color.YELLOW); 
     b1 = new JButton("TEST"); 
     b1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(null, "Hey, hey, hey!"); 
       jt.setText("Hello"); 
      } 
     }); 

     p.add(b1); 
     p.add(jt); 

     f.add(p, BorderLayout.SOUTH); 
    } 
    public static void main (String args[]) { 
     test5 test = new test5(); 
    } 
} 

ответ

3

Вы должны добавить все компоненты в раму ДО того, как вы сделаете рамку видимой. Попробуйте выполнить следующие действия:

f.add(p, BorderLayout.SOUTH); 
f.pack(); 
f.setVisible(true); 
+0

Oh! Спасибо за ответ. Но почему? – Aire

+0

@Aire, по умолчанию все компоненты имеют размер (0, 0), поэтому они не окрашиваются. Метод pack() вызывает диспетчер компоновки, который задает размер/расположение компонента на основе правил диспетчера компоновки. – camickr

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