0

私は Java を初めて使用し (ASP.NET メンバーとして OOPS の概念を知っていますが、過去 2 年間は Java を使用していません)、Tic-Tac-Toe ゲームを作成しています。

Deleted code here as I am putting my code below.

ここで、以下の行がどのように機能しているのか疑問に思っています。

game frame = new game();
frame.setVisible(true);

フレームがゲームクラスのオブジェクトであり、 new game() コンストラクターによって初期化されることは理解しましたが、このオブジェクトに対して .setVisible() メソッドがどのように機能するかを理解していません。

私が直面しているもう 1 つの問題は、他のクラスまたはメソッドで初期化されたオブジェクトにアクセスする方法です。


こんにちは、私はここでこの問題に直面しているので、前の質問をしました: 最初にコードを示します

public class Game extends JFrame {


    private JPanel contentPane;
    //private JPanel settingPane;

    protected JLabel lblPlayerName2; // I am using this one for my testing
    JLabel[] lbls = new JLabel[9];
    private final ButtonGroup buttonGroup = new ButtonGroup();


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Game frame = new Game();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */

    public Game() {
        setTitle("Tic Tac Toe");
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 810, 607);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        contentPane.setName("Tic Tac Toe");
.       
.
..
.
.
.
.
.
.
.
.
.

    for (int i=0; i<lbls.length; i++) {
        lbls[i] = new JLabel(""+(i+1));
        lbls[i].addMouseListener(new AllbtnBehvr());

        lbls[i].setFont(new Font("Trebuchet MS", Font.BOLD, 95));
        lbls[i].setHorizontalAlignment(SwingConstants.CENTER);
        lbls[i].setBorder(new LineBorder(new Color(0, 0, 0), 2));
        panelGameArea.add(lbls[i]);
    }
        .
    .
    .
    .
    .
    .

    .
    .
    .
    .
    .
    .

} // End of Game() 

class AllbtnBehvr implements MouseInputListener{ //Created this class as SubClass of Game Class

        @Override
        public void mouseClicked(MouseEvent src) {
            // TODO Auto-generated method stub

            JLabel b = (JLabel) src.getSource();
            lblPlayerName2.setText(b.getText());


.       }
...
.
.
.
.
.
.
} // End of AllbtnBehvr
}// End of Game Class

ここで、変数 'lblPlayerName2' と lbls[] が Game() コンストラクターの外側で定義されており、アクセスできることを観察しましたが、Game() 内の他の変数にはアクセスできません。ここで、お聞きしたいのですが、

Game() 内の変数にアクセスするにはどうすればよいですか? また、Game クラスの外部にクラスを作成した場合、Game() 内の変数にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

game は JFrame を拡張し、JFrame は java.awt.Window を拡張するため、そのメソッドを継承します

PS。クラスの名前は、最初の文字を大文字にする必要があります。Game.

于 2012-10-30T07:51:42.873 に答える
1

コンストラクター呼び出しはゲーム オブジェクトを返しますが、ゲームは JFrame から派生しているため、オブジェクトは JFrame、java.awt.Frame、java.awt.Window などであり、java.lang.Object まで続きます。

サブクラスはそのスーパークラスから動作を継承するため、java.awt.Window で定義された setVisible() メソッドは、JFrame を介して Window からサブクラス化されたゲーム オブジェクトで使用できます。

于 2012-10-30T08:11:33.927 に答える