Возможно, вы забыли установить макет mainPanel
?
Попробуйте следующее:
mainPanel.setLayout(new FlowLayout());
mainPanel.add(new JTextField("Hello!"));
mainPanel.validate();
UPDATE:
Вышеупомянутое предложение не было достаточно умным.
Как указано camickr , FlowLayout
является макетом по умолчанию для JPanel
.
Следующее предложение будет более полезным, я надеюсь.
Пример, моделирование ситуации.
import java.awt.EventQueue;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JPanelDefaultLayoutTest extends JFrame {
private JPanel mainPanel;
public JPanelDefaultLayoutTest () {
initComponents();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new JPanelDefaultLayoutTest().setVisible(true);
}
});
}
private void initComponents() {
setTitle("Add hello.");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
mainPanel = new JPanel();
JButton button = new JButton();
button.setText("Button");
button.setToolTipText("Press me.");
button.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
JTextField hello = new JTextField("Hello!");
mainPanel.add(hello);
mainPanel.revalidate();
}
});
setContentPane(mainPanel);
mainPanel.add(button);
// pack();
// If you comment the next line (and uncomment the pack() method above),
// you have to resize the frame manually,
// to see the added hello after the button press.
setSize(200, 75);
}
}
Вывод: если размер вашей панели слишком мал, вы должны изменить ее размер вручную, чтобы увидеть добавленный экземпляр JTextField.