JFrame не работает, как ожидалось! - PullRequest
1 голос
/ 29 апреля 2010

Я впервые использую JFrame. Я не могу получить окно для отображения текстовых областей, которые я вложил в JFrame. Я пытаюсь заставить текстовое поле с моим именем отображаться над табличными результатами, форматирование которого я пропустил, пока не смогу заставить JFrame работать.

public void printResults(String[] names, int[] temp, int[][] scores, float[] averages, char[] letters){

    JTextArea outarea= new JTextArea(5,20);
    JTextArea name = new JTextArea(5,20);
    Font font = new Font("Tahoma", Font.BOLD, 48);
    name.setFont(font);
    name.setText("Made By Durka Durka");

    JFrame window = new JFrame();
    window.getContentPane().add(name);
    window.getContentPane().add(outarea);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.pack();
    window.getContentPane().setVisible(true)

    String out = "foo";

    outarea.setText(out);


    //JOptionPane.showMessageDialog(null,window);

}

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

Вероятная причина, по которой JFrame не появляется, из-за этой строки:

window.getContentPane().setVisible(true)

Вышеуказанная строка устанавливает видимость Container, к которому были добавлены JTextArea, но не контролирует видимость самого JFrame - поэтому сам JFrame не отображается.

(Точнее, метод JFrame.getContentPane возвращает Container, поэтому приведенный выше код фактически вызывает метод Containter 'setVisible.)

Попробуйте вместо этого следующее:

window.setVisible(true);

Это сделает видимость самой JFrame видимой.

Также, как предлагали другие ответы, попробуйте использовать Менеджеры макетов , чтобы контролировать места, где должны отображаться компоненты. Ниже приведены ссылки на использование двух из нескольких менеджеров компоновки, которые можно использовать для компоновки компонентов.

2 голосов
/ 29 апреля 2010

Вы должны использовать некоторые из менеджеров по расположению. Эта ссылка должна помочь вам:
http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html

Стандартные менеджеры компоновки Java иногда очень сложны в обращении. Может быть, вы также должны посмотреть в JGoodies: http://www.jgoodies.com/ "Framework". Это проще в использовании, и вы понимаете, что даже Java-интерфейс может выглядеть красиво ..

1 голос
/ 29 апреля 2010

Перво-наперво - вы вызываете printResults в потоке рассылки событий, используя SwingUtilities.invokeLater(Runnable runnable); или SwingUtilities.invokeAndWait(Runnable runnable);? Помните, что вам нужно выполнить всю работу с графическим интерфейсом на EDT.

Если так, попробуйте это:

JFrame window = new JFrame();
// CHANGES HERE
window.getContentPane().setLayout(new BorderLayout();
window.getContentPane().add(name, BorderLayout.NORTH);
window.getContentPane().add(outarea, BorderLayout.CENTER);
// END CHANGES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...