Непоследовательные результаты в Eclipse для Java Swing - PullRequest
2 голосов
/ 12 апреля 2011

Я учу себя Java и читаю "Java All in One Desk Reference для чайников". В настоящее время я использую код, приведенный в книге, для практики Swing. Вот код, который я использую, который взят из книги: `import javax.swing. *;

public class JavaBook6 extends JFrame
{



public static void main(String[] args) 
{
     new JavaBook6();

}

public JavaBook6()
{
    this.setSize(400, 400);
    this.setLocation(500, 0);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("Sample");
    this.setVisible(true);


    JPanel pnlMain = new JPanel();
    JCheckBox chkMy = new JCheckBox("Save");
    JButton btnMy = new JButton("Search");
    JTextField txtMy = new JTextField(20);

    pnlMain.add(chkMy);
    pnlMain.add(txtMy);
    pnlMain.add(btnMy);
    this.add(pnlMain);




}
}

Кажется, я получаю противоречивые результаты, когда нажимаю кнопку run. Окно всегда появляется. Тем не менее, иногда единственное, что отображается в окне, это заголовок фрейма, а иногда такие компоненты, как JCheckBox, JTextArea и JButton, появляются, как я и ожидал.

Мой вопрос: почему компоненты появляются иногда, а другие нет? Я пытался использовать другие компоненты и получить те же противоречивые результаты.

Как я уже говорил, я новичок, и поэтому у меня есть базовое понимание того, как работает java, поэтому, пожалуйста, прости меня, если ответ на мой вопрос очевиден.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Я не слишком впечатлен учебником:

  1. GUI должен быть создан на EDT. Прочитайте раздел из учебника по Swing на Concurrency для получения дополнительной информации. Я также рекомендую вам использовать примеры из учебных пособий, поскольку они включают в себя рекомендации из учебного пособия.

  2. Компонент должен быть добавлен в графический интерфейс перед вызовом метода setVisible (true). (Есть способы обойти это, но пока держите это простым и следуйте этому правилу).

0 голосов
/ 12 апреля 2011

Вам обычно нужно сделать ...

this.pack();

, прежде чем он отобразит все.

Подозреваю, если вы измените размер окна, все отобразится?

Добавление pack () сообщает менеджеру по расположению для размещения и размера всех компонентов.Также, если вы измените размер окна или заставите его каким-либо образом обновиться, на нем также будут отображаться компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...