2

私はこれが非常に単純なことを知っていますが、完全な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

4 に答える 4

2
  1. 大文字からのJavaの名前クラス
  2. FullGUIすでに extendsになっているので、その中に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

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 などのフレームを作成し、frame2 などの fullGUI (メイン メソッド内) のインスタンスを作成しました。これらは 2 つの異なるフレームです。コンストラクターでは、これらのコントロールをframe2 (add()==this.add()) に追加し、frame1.setvisible(true); と言いました。

1 つのフレームにコントロールを追加し、まったく別のフレームを表示することが、画面を最大化しても出力画面に何も表示されない理由です。

于 2012-12-14T07:23:01.657 に答える