Java JFrame未显示(Just Titlebar)

时间:2012-12-14 06:48:16

标签: java swing user-interface jframe

我知道这是非常简单的事情,但作为一个完整的Java新手,我很想念它,有人指出它会有无限的帮助。我盯着屏幕,移动了一切,但仍然没有。

截图: http://i.imgur.com/dwH60.png 这就是运行时出现的所有内容。

fullGUI.java:


import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;


public class fullGUI extends JFrame

{
    JFrame frame = new JFrame(); //creates frame

    public fullGUI() // constructor
    {
        //setLayout(new BorderLayout());
        //add(new shipGrid(), BorderLayout.NORTH);
        //add(new shipGrid(), BorderLayout.NORTH);
        add(new JRadioButton("Horizontal"), BorderLayout.WEST);
        add(new JRadioButton("Vertical"), BorderLayout.WEST);
        add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER);
        frame.setSize(400,600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Battleship!");
        frame.pack(); //sets appropriate size for frame
        frame.setVisible(true);
    }

}

......被......打电话。

test.java


public class test 
{

     public static void main(String[] args) 
     {

         new fullGUI();


     }


}

4 个答案:

答案 0 :(得分:2)

  1. 用大写字母命名Java中的类
  2. FullGUI已经扩展JFrame,因此无需在其中创建另一个JFrame
  3. 致电getContentPane.add()以添加至JFrame
  4. 使用SwingUtilities.invokeLater
  5. 总体来说就像这样

    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JRadioButton;
    import javax.swing.JTextArea;
    
    
    public class FullGUI extends JFrame
    
    {
        public FullGUI() // constructor
        {
            getContentPane().add(new JRadioButton("Horizontal"), BorderLayout.WEST);
            getContentPane().add(new JRadioButton("Vertical"), BorderLayout.WEST);
            getContentPane().add(new JTextArea("Instructions to player will go here"), BorderLayout.CENTER);
            setSize(400,600);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setTitle("Battleship!");
            pack(); //sets appropriate size for frame
            setVisible(true);
        }
    
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
    
            @Override
            public void run() {
                new FillGU();
            }
        });
    }
    

答案 1 :(得分:2)

问题是你在类中扩展JFrame并创建新对象“frame”。您将组件(如JRadioButton或JTextArea)添加到fullGUI中,而JFrame的其他设置适用于框架对象。这取决于你要选择哪种方法,但选择其中一种方法。您可以扩展JFrame,您的类将是JFrame的子级,这意味着您可以从父类调用所有公共或受保护的方法,无需创建JFrame的新实例。其他方法是不扩展JFrame,而是必须创建新的JFrame对象。

答案 2 :(得分:2)

frame.pack()导致您的JFrame根据其内容调整大小。

如果您有frame.setSize(400,600),即使您没有向其内容窗格添加任何内容, 框架将以400x600的尺寸显示。

但是当你调用frame.pack()时,框架会调整大小。在您的情况下,框架的内容窗格不包含任何内容。因此,pack()方法将其大小调整为仅标题栏。

答案 3 :(得分:1)

正如Nikolay Kuznetsov在之前的回答中所说,你已经在fullGUI中扩展了Jframe,因此无需在该类中创建新的Jframe,因为FullGUI的每个实例都将是一个新帧。

用你代码发生的事情是你创建了一个Frame,比如frame1和fullGUI的实例(在主方法中)说frame2,这是两个不同的帧。在构造函数中,您已将这些控件添加到frame2(add()== this.add())并表示frame1.setvisible(true);

将控件添加到一个帧并显示完全不同的帧是您无法在输出scree上看到任何内容的原因,尽管您可以最大化屏幕。