2

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

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

全GUI.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);
    }

}

……打电话给……

测试.java


public class test 
{

     public static void main(String[] args) 
     {

         new fullGUI();


     }


}

4

4 回答 4

2
  1. 用大写字母命名Java中的类
  2. FullGUI已经扩展JFrame,因此无需在JFrame其中创建另一个
  3. 调用getContentPane.add()添加到JFrame
  4. 采用SwingUtilities.invokeLater

所以总的来说是这样的

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();
        }
    });
}
于 2012-12-14T06:55:38.277 回答
2

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

于 2012-12-14T07:17:22.493 回答
2

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

如果你有 frame.setSize(400,600),即使你没有向它的内容窗格添加任何东西,框架也会以 400x600 的大小显示。

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

于 2012-12-14T07:34:38.840 回答
1

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

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

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

于 2012-12-14T07:23:01.657 回答