JFrame没有按预期行事!

时间:2010-04-29 12:53:11

标签: java swing 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 个答案:

答案 0 :(得分:3)

JFrame未出现的可能原因是因为这一行:

window.getContentPane().setVisible(true)

以上一行是设置已添加Container的{​​{1}}的可见性,但不控制JTextArea本身的可见性 - 因此,{ {1}}本身未显示。

(更准确地说,JFrame.getContentPane方法返回JFrame,因此上面的代码实际上是调用JFrame的{​​{1}}方法。)

请尝试以下方法:

Container

这会将Containter本身的可见性设置为可见。

此外,正如其他答案所示,请尝试使用Layout Managers来控制组件的显示位置。以下是使用两个可用于布局组件的布局管理器的链接。

答案 1 :(得分:2)

您应该使用一些布局管理器。这个链接可以帮助你:
http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html

标准的java布局管理器有时候很难处理。也许你也应该研究JGoodies:http://www.jgoodies.com/“框架”。它更容易使用,你意识到即使是一个java gui看起来也不错......

答案 2 :(得分:1)

首先 - 您是使用SwingUtilities.invokeLater(Runnable runnable);还是SwingUtilities.invokeAndWait(Runnable runnable);在事件调度线程上调用printResults?请记住,您需要在EDT上完成所有GUI工作。

如果是这样,试试这个:

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