2010-04-29 3 views
1

Это мой первый раз, используя JFrame. Я не могу получить окно для отображения текстовых областей, которые я вложил в 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

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

window.getContentPane().setVisible(true) 

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

(Чтобы быть более точным, то метод JFrame.getContentPane возвращает Container, поэтому приведенный выше код фактически называя Containter «s setVisible метод.)

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

window.setVisible(true); 

Это будет установите видимость самого JFrame, чтобы быть видимым.

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

+0

+1, хороший улов! – justkt

+0

Это исправлено. Я не понимал, что у вас могут быть видимые невидимые разделы. – 2010-04-30 05:12:48

1

Первые вещи первый - вы звоните printResults на тему событий диспетчерское с помощью SwingUtilities.invokeLater(Runnable runnable); или SwingUtilities.invokeAndWait(Runnable runnable);? Помните, что вам нужно выполнить всю работу с GUI в 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 
2

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

Стандартные менеджеры макетов java иногда очень трудно обрабатывать. Возможно, вам стоит также изучить JGoodies: http://www.jgoodies.com/ «Рамки». Это проще в использовании, и вы понимаете, что даже Java GUI может выглядеть красиво ..

+0

+1 для менеджеров компоновки. – justkt

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