Java Swing GUI Невидимый

1

в основном у меня очень простой графический интерфейс, но по какой-то причине, когда я запускаю код, JButtons появляется только при наведении мыши на них, а JTextField появляется только в том случае, если я нажимаю на них. Как исправить это, чтобы они были видны при запуске программы? Благодарю.

Вот мой код:

    //JFrame + settings
    JFrame frmFormSubmission = new JFrame();

    frmFormSubmission.setSize(new Dimension(350, 165));
    frmFormSubmission.setTitle("Form Submission - Client");
    frmFormSubmission.setLocationRelativeTo(null);
    frmFormSubmission.setVisible(true);
    frmFormSubmission.setResizable(false);
    frmFormSubmission.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //JPanel
    JPanel panel = new JPanel();
    frmFormSubmission.getContentPane().add(panel, BorderLayout.CENTER);
    panel.setLayout(null);

    //JLabels
    //Name
    JLabel lblName = new JLabel("Name:");
    lblName.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblName.setBounds(46, 12, 40, 14);
    panel.add(lblName);

    //Address
    JLabel lblAddress = new JLabel("Address:");
    lblAddress.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblAddress.setBounds(33, 37, 53, 14);
    panel.add(lblAddress);

    //Phone
    JLabel lblPhone = new JLabel("Phone #:");
    lblPhone.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblPhone.setBounds(28, 62, 58, 14);
    panel.add(lblPhone);

    //Email
    JLabel lblEmail = new JLabel("Email:");
    lblEmail.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblEmail.setBounds(46, 87, 36, 14);
    panel.add(lblEmail);

    //JTextFields
    //Name
    nameField = new JTextField();
    nameField.setBounds(93, 11, 137, 20);
    panel.add(nameField);
    nameField.setColumns(10);

    //Address
    addressField = new JTextField();
    addressField.setColumns(10);
    addressField.setBounds(93, 36, 137, 20);
    panel.add(addressField);

    //Phone
    phoneField = new JTextField();
    phoneField.setColumns(10);
    phoneField.setBounds(93, 61, 137, 20);
    panel.add(phoneField);

    //Email
    emailField = new JTextField();
    emailField.setColumns(10);
    emailField.setBounds(93, 86, 137, 20);
    panel.add(emailField);

    //JButtons
    //Submit
    JButton btnSubmit = new JButton("Submit");
    btnSubmit.setBounds(240, 10, 89, 23);
    panel.add(btnSubmit);

    //Cancel
    JButton btnCancel = new JButton("Cancel");
    btnCancel.setBounds(240, 44, 89, 23);
    panel.add(btnCancel);

    //Flush
    JButton btnFlush = new JButton("Flush");
    btnFlush.setBounds(240, 76, 89, 23);
    panel.add(btnFlush);

    //Checkbox
    JCheckBox chckbxPromotions = new JCheckBox("Email me with new and promotions!");
    chckbxPromotions.setBounds(25, 108, 205, 23);
    panel.add(chckbxPromotions);

Любая помощь очень ценится!

  • 0
    Кстати, я настроил ваш код для компиляции ( см. Здесь ) и протестировал его в Netbeans 8, но не смог воспроизвести вашу ошибку отображения. Это выглядело правильно для меня .
  • 0
    Ах, когда я отредактировал свою локальную копию вашего кода, я создал экземпляр JFrame в потоке очереди событий AWT по привычке. Когда я сделал это в главном потоке, я смог повторить вашу проблему. В вашем вопросе не ясно, какой поток вы использовали, но вы не должны выполнять инициализацию GUI или обновления в основном потоке - используйте что-то вроде SwingUtilities.invokeLater .
Теги:
user-interface
swing
invisible

2 ответа

2
Лучший ответ

Вызовите frmFormSubmission.setVisible(true); как последнее, что вы делаете. setVisible будет компоновать ваши компоненты, чтобы их можно было правильно нарисовать. Если вы добавите компоненты, не выкладывая их, тогда у вас появятся графические проблемы.

Для получения дополнительной информации о том, что это значит, ознакомьтесь с документацией по методу проверки.

  • 0
    Спасибо! Это сработало для меня.
0

Кроме того, попробуйте

frmFormSubmission.invalidate();
frmFormSubmission.validate();
frmFormSubmission.repaint();

Если это все еще не работает, вы можете попробовать следующее:

SwingUtilities.updateComponentTreeUI(frmFormSubmission);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню