質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

ボタンを押したら別のjavaファイルを実行したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,767

Alpa

score 30

シューティングゲームのメニューでボタンを押したら
シューティングゲーム(別のjavaファイル)を実行するようにしたいのですが
どのようにしたらいいのか調べてもよくわかりませんでした
回答よろしくお願いします

追記

まず自分は今シューティングゲームを作っていて
そのメニュー画面を今作っていて
そのメニュー画面にボタンを表示していて
そのボタンを押したらゲームが始まるようにしたいです

そこでボタンを押したら{}内を処理するというのは出来たのですが
別javaファイルに書いたゲームをどのように
メニュー画面の処理を書いたファイルから開始させたらいいのかわかりません

これがメニュー画面で

public class MyGame2 extends JFrame implements ActionListener{

    JPanel MenuPanel;

    JButton GameStart;
    JButton Custom;
    JButton DeveloperCode;
    JButton Option;
    JButton GameEnd;

    public static final String Cmd_GameStart = "GameStart";
    public static final String Cmd_Custom = "Custom";
    public static final String Cmd_DeveloperCode = "DeveloperCode";
    public static final String Cmd_Option = "Option";
    public static final String Cmd_GameEnd = "GameEnd";

    public static void main(String[] args){

        MyGame2 MenuFrame = new MyGame2();//ウィンドウを内部的に作成
        MenuFrame.setSize(900, 550);//ウィンドウサイズ設定
        MenuFrame.setTitle("シューティングゲーム");
        MenuFrame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定

        MenuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //ウィンドウを×で閉じるようにする設定

        MenuFrame.setVisible(true);//ウィンドウを可視化

    }

    MyGame2(){

        MenuPanel = new JPanel();//menupanel設定
        MenuPanel.setLayout(null);//レイアウトマネージャー無効化

        GameStart = new JButton("ゲーム開始");//ボタンの文字列設定
        Custom = new JButton("カスタム");
        DeveloperCode = new JButton("開発者コード");
        Option = new JButton("設定");
        GameEnd = new JButton("ゲーム終了");

        GameStart.setForeground(Color.BLACK);//文字の色設定
        GameStart.setBackground(Color.WHITE);//背景の色設定
        Custom.setForeground(Color.BLACK);
        Custom.setBackground(Color.WHITE);
        DeveloperCode.setForeground(Color.BLACK);
        DeveloperCode.setBackground(Color.WHITE);
        Option.setForeground(Color.BLACK);
        Option.setBackground(Color.WHITE);
        GameEnd.setForeground(Color.BLACK);
        GameEnd.setBackground(Color.WHITE);

        GameStart.setHorizontalAlignment(JButton.CENTER);//文字の大まかな位置の設定
        GameStart.setVerticalAlignment(JButton.CENTER);
        Custom.setHorizontalAlignment(JButton.CENTER);
        Custom.setVerticalAlignment(JButton.CENTER);
        DeveloperCode.setHorizontalAlignment(JButton.CENTER);
        DeveloperCode.setVerticalAlignment(JButton.CENTER);
        Option.setHorizontalAlignment(JButton.CENTER);
        Option.setVerticalAlignment(JButton.CENTER);
        GameEnd.setHorizontalAlignment(JButton.CENTER);
        GameEnd.setVerticalAlignment(JButton.CENTER);

        GameStart.setBounds(769, 0, 115, 100);//ボタンの座標とサイズ設定
        Custom.setBounds(769, 100, 115, 100);
        DeveloperCode.setBounds(769, 200, 115, 100);
        Option.setBounds(769, 300, 115, 100);
        GameEnd.setBounds(769, 400, 115, 100);

        GameStart.setActionCommand(Cmd_GameStart);
        Custom.setActionCommand(Cmd_Custom);
        DeveloperCode.setActionCommand(Cmd_DeveloperCode);
        Option.setActionCommand(Cmd_Option);
        GameEnd.setActionCommand(Cmd_GameEnd);

        GameStart.addActionListener(this);
        Custom.addActionListener(this);
        DeveloperCode.addActionListener(this);
        Option.addActionListener(this);
        GameEnd.addActionListener(this);

        MenuPanel.add(GameStart);//ボタンをMenuPanelに追加
        MenuPanel.add(Custom);
        MenuPanel.add(DeveloperCode);
        MenuPanel.add(Option);
        MenuPanel.add(GameEnd);

        getContentPane().add(MenuPanel, BorderLayout.CENTER);//???

    }

    public void actionPerformed(ActionEvent e){

        String cmd = e.getActionCommand();

        if(cmd.equals(Cmd_GameStart)){

        }

        if(cmd.equals(Cmd_Custom)){

        }

        if(cmd.equals(Cmd_DeveloperCode)){

        }

        if(cmd.equals(Cmd_Option)){

        }

        if(cmd.equals(Cmd_GameEnd)){

        }

    }

}

これがシューティングゲームです

public class MyGame extends JFrame implements ActionListener, MouseMotionListener{

    int zikiX = 750;//自機のX座標
    int zikiY = 225;//自機のY座標

    int teki1X = 130;//敵機1のX座標
    int teki1Y = 200;//敵機1のY座標

    int zikidamaX = zikiX-30;//自機の弾のX座標
    int zikidamaY = zikiY;//自機の弾のY座標

    int count;//カウント感知用変数

    ImageIcon icon1 = new ImageIcon
    ("C:\\Users\\miyab\\Desktop\\シューティングゲーム\\画像ファイル\\自機.png");//自機の画像ファイル指定;//ImageIconのicon1作成
    ImageIcon icon2 = new ImageIcon
    ("C:\\Users\\miyab\\Desktop\\シューティングゲーム\\画像ファイル\\自機弾.png");//自機弾の画像ファイル指定;//ImageIconのicon2作成

    ImageIcon icon3 = new ImageIcon
    ("C:\\Users\\miyab\\Desktop\\シューティングゲーム\\画像ファイル\\敵機.png");//敵機の画像ファイル指定;//ImageIconのicon3作成

    JLabel ziki;//自機作成
    JLabel zikizahyou;//自機の座標作成
    JLabel zikidamazahyou;////自機弾の座標作成
    JLabel zikidama;//自機弾作成

    JLabel teki1;//敵機1作成
    JLabel teki1zahyou;//敵機1の座標作成

    JPanel panel;//panel作成

    Timer timer;//timer作成

    public static void main(String[] args){

        MyGame frame = new MyGame();//ウィンドウを内部的に作成
        frame.setSize(900, 550);//ウィンドウサイズ設定
        frame.setTitle("シューティングゲーム");
        frame.setLocationRelativeTo(null);//ウィンドウの位置を中央に設定

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //ウィンドウを×で閉じるようにする設定

        frame.setVisible(true);//ウィンドウを可視化

    }

    MyGame(){

        panel = new JPanel();//panel設定
        panel.setLayout(null);//レイアウトマネージャー無効化

        ziki = new JLabel(icon1);//JLabelに自機の画像ファイル設定
        zikizahyou = new JLabel();//自機の座標を入れる
        zikidamazahyou = new JLabel();//自機の弾の座標を入れる
        zikidama = new JLabel(icon2);//JLabelに自機の弾の画像ファイル設定

        teki1 = new JLabel(icon3);//JLabelに敵機の画像ファイル設定
        teki1zahyou = new JLabel();//敵機の座標を入れ

        ziki.setBounds(zikiX, zikiY, 80, 40);//zikiのサイズと座標設定
        zikizahyou.setText("自機 "+"X座標:"+zikiX+" Y座標:"+zikiY);//自機の座標を設定
        zikizahyou.setBounds(5, 5, 200, 15);//自機の座標の座標とサイズを設定
        zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX+" Y座標:"+zikidamaY);//自機の座標を設定
        zikidamazahyou.setBounds(5, 17, 200, 15);//自機の座標の座標とサイズを設定

        teki1.setBounds(teki1X, teki1Y, 40, 20);//teki1のサイズと座標設定
        teki1zahyou.setText("敵機1 "+"X座標:"+teki1X+" Y座標:"+teki1Y);//自機の座標を設定
        teki1zahyou.setBounds(5, 30, 200, 15);//自機の座標の座標とサイズを設定

        timer = new Timer(10, this);//タイマーの間隔

        panel.add(ziki);//自機画像をpanelに追加
        panel.add(zikizahyou);//自機の座標を画面に表示
        panel.add(zikidamazahyou);//自機の弾の座標を画面に表示

        panel.add(teki1);//敵機を追加
        panel.add(teki1zahyou);//敵機1の座標を画面に表示

        pack();//???

        getContentPane().add(panel, BorderLayout.CENTER);//???

        enableEvents(java.awt.AWTEvent.KEY_EVENT_MASK);//キーイベントの有効化

        addMouseMotionListener(this);//マウスの動きの感知を有効化

    }

    protected void processKeyEvent(java.awt.event.KeyEvent e){//キーイベントの関数

        if(e.getID() == java.awt.event.KeyEvent.KEY_PRESSED){

            if(e.getKeyCode() == java.awt.event.KeyEvent.VK_A){

                if(zikidama.getParent() == panel){

                    //zikidamaがpanelにある時は何もしない

                }else{

                    zikidamaX = zikiX-10;//zikidamaXを初期化
                    zikidamaY = zikiY;//zikidamaYを初期化

                    zikidama.setBounds(zikidamaX, zikidamaY, 20, 20);//自機の弾のサイズと座標を設定
                    panel.add(zikidama);//panelにzikidamaを追加

                }
                timer.start();//タイマースタート

            }

        }
    }

    public void actionPerformed(ActionEvent e){

        if(zikidamaX <= 0){

            timer.stop();//timerストップ
            panel.remove(zikidama);//panelからzikidama削除
            panel.repaint();//panelを更新

            zikidamaX = zikiX-10;//zikidamaXを初期化
            zikidamaY = zikiY;//zikidamaYを初期化
            zikidama.setBounds(zikidamaX, zikidamaY, 20, 20);//自機の弾のサイズと座標を設定

        }else{

            zikidamaX -= 15;//zikidamaXを-15
            zikidama.setLocation(zikidamaX,zikidamaY);//座標を再設定
            zikidamazahyou.setText("自機の弾 "+"X座標:"+zikidamaX+" Y座標:"+zikidamaY);
            //座標表示を更新

        }

        if(zikidamaX >= teki1X-10 && zikidamaX <= teki1X+10 &&
            zikidamaY >= teki1Y-10 && zikidamaY <= teki1Y+10 &&
                teki1.getParent() == panel){

                    timer.stop();//タイマーストップ
                    panel.remove(zikidama);//zikidama削除
                    panel.remove(teki1);//teki1削除
                    panel.repaint();//panel更新

                }

    }

    public void mouseMoved(MouseEvent e){

        Point point = e.getPoint();
        zikiX = point.x-43;//マウスに画像のX座標の中心を合わせる
        zikiY = point.y-45;//マウスに画像のY座標の中心を合わせる

        if(zikiX <= 0){//座標が画面外に行ったら左端に戻す

            zikiX = 0;//zikiのX座標を0に設定

        }

        if(zikiX >= 804){//座標が画面外に行ったら右端に戻す

            zikiX = 804;//zikiのX座標を804に設定

        }

        if(zikiY <= 1){//座標が画面外に行ったら上端に戻す

            zikiY = 1;//zikiのY座標を1に設定

        }

        if(zikiY >= 471){//座標が画面外に行ったら下端に戻す

            zikiY = 471;//zikiのY座標を471に設定

        }

        ziki.setLocation(zikiX,zikiY);//座標を再設定
        zikizahyou.setText("自機 "+"X座標:"+zikiX+" Y座標:"+zikiY);//座標表示を更新

    }

    public void mouseDragged(MouseEvent e){

        //マウスがドラッグされたときに呼び出される

    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fiveHundred

    2017/10/14 14:47

    あまりにも情報が少なすぎます。具体的な情報やソースコードを提示してください。

    キャンセル

  • fiveHundred

    2017/10/14 16:52

    追記されたようですが、まだ情報が足りません。どのようなものでメニューのUIやシューティングゲームを作ったのでしょうか?。また、メニューのクラスとシューティングゲームのクラスがどのようになっているのか分からないので、この2点のソースコードを記載してください。

    キャンセル

回答 1

checkベストアンサー

0

MyGameやMyGame2で継承しているJFrameは、ウィンドウを表すクラスです。
そのため、同じウィンドウ内でメニュー画面とゲーム画面を切り替える、という方法を使いたいのであれば、代わりにJPanelを継承するのがいいのではないかと思います。
そうすれば、最初はメニュー画面のパネルを表示し、「ゲーム開始」ボタンを押されたら、メニュー画面のパネルを非表示にしてゲーム画面のパネルを表示する、ということが出来ます。

そうではなく、別ウィンドウでゲームを立ち上げるというのであれば、MyGameのmainメソッドを別の名前に変更し、それをMyGame2から呼べばいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/14 19:24

    なるほどそんな方法があったんですね!!
    ありがとうございます!!
    頑張ってやってみます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる