• ベストアンサー

アプリケーションでの画面遷移

JavaJ2SEを使ってアプリケーションを作成しています。 ボタンを押すと画面が遷移するというプログラムがわかりません。 今出ているフレームを閉じて、別のフレームを開きたいと思っているのですが、記述が思いつきません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tubumame
  • ベストアンサー率63% (7/11)
回答No.3

>>jazzy_tさん JButtonなどのメソッド、setActionCommandを利用します。 setActionCommandを利用して各オブジェクト毎にActionCommand というものを設定し、イベント発生時にそのイベントから getActionCommandメソッドで、イベントを発生させたオブジェクト のActionCommandを取得し、イベントを発生させたオブジェクト毎 に処理を分ける事ができます。 具体的には以下のような感じ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Frame1 extends JFrame implements ActionListener{ // コンストラクタ public Frame1(){ super( "FRAME1" ); // ボタン1を作成 JButton button1 = new JButton( "FRAME2へ" ); // アクションコマンド設定 button1.setActionCommand( "btn1" ); // ボタン2を作成 JButton button2 = new JButton( "FRAME3へ" ); // アクションコマンド設定 button1.setActionCommand( "btn2" ); // アクションリスナークラス登録 button1.addActionListener( this ); button2.addActionListener( this ); ......中略....... } // メイン public static void main( String[] args ){ Frame1 frame = new Frame1(); frame.setVisible( true ); } public void actionPerformed( ActionEvent ae ){ try{ // アクションイベントから // アクションコマンドの取得 String command = ae.getActionCommand(); // 押下されたボタンを判別して // それぞれの処理を行う if( command.equals( "btn1" ) ){ // ボタン1が押下されたので // それに対応した処理を記述 }else if( command.equals( "btn2" ) ){ // ボタン2が押下されたので // それに対応した処理を記述 } ......中略.......

その他の回答 (3)

  • tubumame
  • ベストアンサー率63% (7/11)
回答No.4

>私はレイアウトマネージャを使ってないので、パネルがありません。 panelはレイアウトマネージャを使用しないでも、利用できます。その場合はデフォルトのレイアウトマネージャを使用することになりますが....。 canvasを利用しているということですかね??

scholes
質問者

お礼

回答ありがとうございます!! 私は今までスーパクラスを使っていなかったのですが、スーパクラスを試してみて、修正を重ねてうまく実行することが出来ました。 今までいろいろ調べたつもりですが期待通りのものは見つからず、ここでtubumameさんに教えていただき、初めて自分のプログラムに適用できる記述を見つけることが出来ました。 本当に感謝しています。ありがとうございました。

  • jazzy_t
  • ベストアンサー率0% (0/1)
回答No.2

便乗して質問する事を失礼します。 上記で画面推移は出来たのですが、例えばトップ画面にボタンが2つ以上あり、それぞれ別のフレームを開きたい場合はどのように変更されたらよろしいのでしょうか?

  • tubumame
  • ベストアンサー率63% (7/11)
回答No.1

javaアプリケーション作成の経験はないので、細かい突っ込みは勘弁していただくとして、以下のような感じでできます。(長くてすみません) <<Frame1からボタン押下でFrame2へ遷移するサンプル>> [Frame1]---------------------------------------- import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Frame1 extends JFrame implements ActionListener{ // コンストラクタ public Frame1(){ super( "FRAME1" ); // ボタンを作成 JButton button = new JButton( "FRAME2へ" ); // ボタンのアクションリスナークラスとして // このクラス(Fram1.class)を登録 // このクラス(Fram1.class)は // ActionListenerクラス // をimpleしているためリスナークラスとして // 登録することができる。 // ここで登録したので、ボタン押下時に // actionPerformedが呼び出される。 button.addActionListener( this ); // パネルを作成 JPanel panel = new JPanel(); // ボタン追加 panel.add(button); // コンテントペインにパネルを追加 getContentPane().add(panel); // ウインドウが閉じられたときにアプリケーションを終了するように設定 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // サブコンポーネントの推奨サイズおよびレイアウトに合わせて // この Window をサイズ変更するように設定 pack(); } // メイン public static void main( String[] args ){ Frame1 frame = new Frame1(); frame.setVisible( true ); } // イベントをハンドルする関数 // 画面上のボタンが押下された時 // 呼び出される public void actionPerformed( ActionEvent ae ){ try{ // 次画面のFram2を生成 Frame2 next = new Frame2(); // 次画面を表示 next.setVisible( true ); // 本画面(Fram1)を非表示 // これでいいの?? setVisible( false ); }catch( Exception e ){ e.printStackTrace(); } } } [Frame2]---------------------------------------- import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Frame2 extends JFrame{ // コンストラクタ public Frame2(){ super( "FRAME2" ); // ラベルを作成 JLabel label = new JLabel( "FRAME2が表示されました" ); // パネルを作成 JPanel panel = new JPanel(); //ラベルを追加 panel.add( label ); // コンテントペインにパネルを追加 getContentPane().add( panel ); // ウインドウが閉じられたときにアプリケーションを終了するように設定 setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // サブコンポーネントの推奨サイズおよびレイアウトに合わせて // この Window をサイズ変更するように設定 pack(); } } お力になれましたかね?

scholes
質問者

お礼

大変参考になりました。 ありがとうございます。 しかしまだ一つ問題があります。 私はレイアウトマネージャを使ってないので、パネルがありません。 この場合のボタン、ラベルはどこに載せればいいでしょうか?

scholes
質問者

補足

問題解決できました! 本当に助かりました。 ありがとうございました。

関連するQ&A