【java】ボタンクリックで画面遷移を行う方法

このQ&Aのポイント
  • javaをはじめて2週間の_tonnuraと申します。swingを用いて1枚のフレームに対し、ボタンクリックにより画面遷移を行っていくアプリを作成しています。最初の画面での画面遷移は成功するのですが、その画面からの遷移のために別のパネルを加えると画面が更新されません。
  • 「getContentPane().list(System.out)」で確認したところ、物はあるようなので、「validate()」をかけているのですが変化なしです。過去の質問に解決方法があると思い、検索で「QNo.196900 クリックでGUI部品を追加する」を見つけたのですが、コンポーネントに対するremoveAll後のvalidate()だけでは対処できませんでした。
  • actionPerformedにて、「KihonCore kihonC」に飛ばしていますが、処理として「各部品の定義・配置・新たに定義したパネルへのセット後 パネルをコンポーネントへ配置」を行っています。画面遷移の順序としては初期画面表示→2枚目の画面を貼り付け→初期画面を貼り付け(初期メニュー画面を描写)となっています。
回答を見る
  • ベストアンサー

【swing】ボタンクリックにより、パネルごとの差し替えを行う

javaをはじめて2週間の_tonnuraと申します。 swingを用いて1枚のフレームに対し、ボタンクリックにより 画面遷移を行っていくアプリを作成しています。 最初の画面での画面遷移は成功するのですが、 その画面からの遷移のために、別のパネルを加えると画面が更新されません。初期画面→2枚目の画面→×3枚目の画面(2枚目のまま) 「getContentPane().list(System.out)」で確認したところ、物はあるようなので、「validate()」をかけているのですが変化なしです。 過去の質問に解決方法があると思い、検索で「QNo.196900 クリックでGUI部品を追加する」を見つけたのですが、コンポーネントに対するremoveAll後のvalidate()だけでは対処できませんでした。 以下にソースを記載します。 汚くて申し訳ありませんが、ご解答いただければ嬉しく思います。 ※actionPerformedにて、「KihonCore kihonC」に飛ばしていますが 処理として「各部品の定義・配置・新たに定義したパネルへのセット後 パネルをコンポーネントへ配置」を行っています。 ※画面遷移の順序としては 初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写)となっています。 ------------------------------------------------------------ package test; import java.awt.*; import javax.swing.*; import test.KihonCore.myListener; public class Menu extends JFrame implements ActionListener { public static void main(String[] args) { Menu frame_m = new Menu(); frame_m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame_m.setTitle("画面遷移テスト"); frame_m.setBounds(10, 10, 750, 570); frame_m.setVisible(true); frame_m.setResizable(false); } Menu() { SpringLayout layout = new SpringLayout(); JPanel panel_menu = new JPanel(); panel_menu.setLayout(layout); JButton btn_gozen = new JButton();         tn_gozen.addActionListener(this); btn_gozen.setActionCommand("btn_gozen");         btn_gozen.setPreferredSize(new Dimension(118, 45)); ImageIcon icon_gozen = new ImageIcon("./image/btn_gozen.png"); btn_gozen.setIcon(icon_gozen); panel_menu.add(btn_gozen); getContentPane().add(panel_menu); validate(); addWindowListener(new myListener(0)); System.out.println("起動直後の画面状態"); getContentPane().list(System.out); } public void actionPerformed(ActionEvent ae) { String cmd = ae.getActionCommand(); try { if (cmd.equals("btn_gozen")) { //■2枚目の画面を貼り付け getContentPane().removeAll(); KihonCore kihonC = new KihonCore(); kihonC.btnClk_MenuAm(getContentPane()); validate(); System.out.println("2画面目遷移後の画面状態"); getContentPane().list(System.out); } else if (cmd.equals("btn_b01")) { System.out.println("2画面目の1が押されました。"); } else if (cmd.equals("btn_b02")) { System.out.println("2画面目の2が押されました。。");// } else if (cmd.equals("btn_seiseki")) { System.out.println("メニューボタン4が押下されました。"); } else if (cmd.equals("btn_syuuryou")) { System.out.println("終了ボタンが押下されました。"); int option = JOptionPane.showConfirmDialog(null, "終了しますか?", "終了確認", JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { System.out.println("はいを選択:終了"); System.exit(0); } else if (option == JOptionPane.NO_OPTION) { System.out.println("いいえを選択:終了しない"); return; } } else if (cmd.equals("btn_return")) { System.out.println("戻るボタンが押下されました。"); //■初期画面を貼り付け(初期メニュー画面を描写 getContentPane().removeAll(); KihonCore kihonC = new KihonCore(); kihonC.btnClk_Rtn(getContentPane()); validate(); System.out.println("2画面目にて戻るを押した直後の画面状態"); getContentPane().list(System.out); } } catch (Exception e) { System.out.println("エラーが発生しました"); e.printStackTrace(); } } }

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

補足ありがとうございます。 ざっと見たところ、KihonCoreの各メソッドで Menu mn = new Menu(); でMenuクラスのインスタンスを生成しているのが変な動作の原因のような気がします。 Menuのインスタンスを生成した時点で別のフレーム(窓)を生成しています。 また、ボタンをアクションリスナーに登録していますが別フレームに登録していますので、 2つ目の画面から3つ目の画面に移るボタンを押したとしても そのフレームでイベントは起こりません。 なので、KihonCoreのメソッドを呼ぶ際にMenu自身を引数とする等したほうが良いかもしれません。

_tonnura
質問者

お礼

lailai2580様 お忙しい中ご回答していただき、とてもうれしく思います。 大変わかりやすく、とても参考になりました! なるほど、「Menu生成は起動イベントとして、あとで作り直そう」 と思っていたので盲点でした。知識不足でお恥ずかしいのですが 今の自分にはとても価値のある失敗だったと思います。 本来なら、ソースの修正を済まして「出来ました!」と報告するのが 礼儀だとは思いますが、別の作業が入ってしまい、ソースをいじるのは数日後になりそうです。申し訳ありません。 本を購入したり、知人に聞いたりして対応を考えていたのですが、 解決できず、ダメ元で初めてネットで書き込みさせていただきました。 わかりやすい回答、頭の中の疑問点が一気に無くなった感じです。 1日も早く質問に答えられる側になるよう、精進したいと思います。 本当にありがとうございました!

その他の回答 (1)

回答No.1

KihonCoreクラスのbtnClk_MenuAmメソッドとbtnClk_Rtnメソッドは staticにしてもいいような気がしなくもないですが それはさておき 質問内容がよく理解できなかったのですが 現在の状態では >初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写) が出来ているということですか? それを拡張して >初期画面→2枚目の画面→×3枚目の画面 にしたいという意味ですか? >初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写) これが出来ているのであれば、3枚目の画面を表示するのは同じ要領です。 出来ていないのであれば、KihonCoreクラスのbtnClk_Rtnメソッドに問題があるのではないでしょうか。 個人的に addWindowListener(new myListener(0)); が何なのかも気になりました。

_tonnura
質問者

補足

lailai2580さん、ご回答ありがとうございます。 質問内容が分かりづらくてすいませんでした。 初期画面→(btn_gozen押下)→2枚目画面表示→(btn_returnボタン押下)→×3枚目(表示できず。2枚目の画面のまま)という状態です。 kihonCoreクラスのソースを記載させていただきます。 ※myListenerですが「windowClosing(WindowEvent we)」時にダイアログを表示させる処理です。文字数の関係で掲載できませんでした・・・Menuクラスの「addWindowListener(new myListener(0));」をコメントアウトしても画面については同じだったので無関係だとは思います。 ------------------------------------------------------------ package test; import java.awt.*; import javax.swing.*; import test.Menu; public class KihonCore { //■2枚目の画面にてbtn_returnを押下 void btnClk_Rtn(Container c){ System.out.println("戻るボタン処理開始"); SpringLayout layout = new SpringLayout(); JPanel p01 = new JPanel(); p01.setOpaque(true); p01.setLayout(layout); Menu mn = new Menu(); //背景 ImageIcon title = new ImageIcon("./image/title_main.png"); JLabel t_label = new JLabel(title); //画面ヘッダー背景 ImageIcon icon_logo01 = new ImageIcon("./image/header_whiteR.png"); JLabel logo01 = new JLabel(icon_logo01); //画面右上ロゴ ImageIcon icon_logo02 = new ImageIcon("./image/header_dsLogo.png"); JLabel logo02 = new JLabel(icon_logo02); JButton btn_gozen = new JButton(); btn_gozen.addActionListener(mn); btn_gozen.setActionCommand("btn_gozen"); btn_gozen.setPreferredSize(new Dimension(118, 45)); ImageIcon icon_gozen = new ImageIcon("./image/btn_gozen.png"); btn_gozen.setIcon(icon_gozen); JButton btn_gogo = new JButton(); btn_gogo.setActionCommand("btn_gogo"); btn_gogo.setPreferredSize(new Dimension(118, 45)); ImageIcon icon_gogo = new ImageIcon("./image/btn_gogo.png"); btn_gogo.setIcon(icon_gogo); JButton btn_syuuryou = new JButton("終了"); btn_syuuryou.setActionCommand("btn_syuuryou"); btn_syuuryou.setPreferredSize(new Dimension(100, 50)); btn_syuuryou.setFont(new Font("HG丸ゴシックM-PRO", Font.PLAIN, 28)); layout.putConstraint(SpringLayout.NORTH, logo02, 5, SpringLayout.NORTH, p01); layout.putConstraint(SpringLayout.WEST, logo02, 607, Spr ingLayout.WEST, p01); layout.putConstraint(SpringLayout.NORTH, btn_gozen, 90, SpringLayout.NORTH, p01); layout.putConstraint(SpringLayout.WEST, btn_gozen, 370, SpringLayout.WEST,p01); layout.putConstraint(SpringLayout.NORTH, btn_gogo, 185, SpringLayout.NORTH, p01); layout.putConstraint(SpringLayout.WEST, btn_gogo, 370, S pringLayout.WEST, p01); layout.putConstraint(SpringLayout.NORTH, btn_syuuryou, 4 80,SpringLayout.NORTH, p01); layout.putConstraint(SpringLayout.WEST, btn_syuuryou, 62 3, SpringLayout.WEST,p01); p01.add(btn_gozen); p01.add(btn_gogo); p01.add(btn_syuuryou); p01.add(logo02); p01.add(logo01); p01.add(t_label); c.add(p01); } //■メニュー画面にてbtn_gozen押下 void btnClk_MenuAm(Container c){ ※btnClk_Rtnと同様の処理です。定義と配置は文字数の関係で省略させていただきます。(問題のボタンのみ記載・配置部品の位置等は異なっています) JButton btn_return = new JButton("戻る"); btn_return.addActionListener(mn); btn_return.setActionCommand("btn_return"); btn_return.setPreferredSize(new Dimension(100, 50)); layout.putConstraint(SpringLayout.NORTH, btn_return, 480,SpringLayout.NORTH, p02); layout.putConstraint(SpringLayout.WEST, btn_return, 627, SpringLayout.WEST,p02); p02.add(btn_gozenB01); p02.add(btn_gozenB02); p02.add(label_gozenB01); p02.add(label_gozenB02); p02.add(btn_return); p02.add(logo02); p02.add(logo03); p02.add(logo01); c.add(p02); } }

関連するQ&A

  • 【Swing】JPanel クラス外からのremoveについて

    _tonnuraと申します。どうぞよろしくお願いします。 現在、 ・初期画面(Menu.java) ・イベント(ButtonClicked.java) ・パネル設定(Mondai.java) の3つを使用して、画面を切り替えようとしています。(パネルを載せていく形です) 「Class Mondai」にて定義したパネル(p10)の部品を、フレームに載せる前にいじりたいと思っていますが、「☆」の部分で困っています。 内部で「add」「remove」する分には問題ないのですが、一旦外にでてしまうと、配列でしか「remove」できない状態です。 上記の挙動から、戻り値的には「ButtonClicked」上でコンテナ(p10)が見えていると思うのですが、配列以外(名前やID等、処理のたびに変動しないもの)で指定することはできないのでしょうか。 画面によってはループを考えていますので、必要な部分だけ追記したいのです。配列での指定ですと応用が辛いので・・。 尚、ソースが無駄に長いため 概念的な部分だけ抜き出しています。 「そもそも」な部分が多々あると思いますが、なにとぞよろしくお願いします。 ■Class Menu package test; //フレームの定義 public class Menu extends JFrame{     public static void main(String[] args) {         Menu frame_m = new Menu();         frame_m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         frame_m.setTitle("画面遷移テスト");         frame_m.setBounds(10, 10, 750, 570);         frame_m.setVisible(true);         frame_m.setResizable(false);     }     Menu() {     ~(省略)初期画面のパネル・部品・レイアウトに関する宣言~     panel_menu.add(t_label);     getContentPane().add(panel_menu);     validate();     } ■Class ButtonClicked package test; Class ButtonClicked implemments ActionListener{     //フレームを格納 パネル作成時の設置先として使用      public Menu owner;     //パネルを格納  前パネルの削除先として使用(getContentPane)     public Container subowner;     public void actionPerformed(ActionEvent ae) {             String cmd = ae.getActionCommand();             if (cmd.equals("btn_01")) {             //遷移画面の描写(パネルを被せる)                 Mondai obj = new Mondai();                 Container p10 = obj.drawPanel(owner);     //Class Mondaiにて定義したパネル上のコンポーネントJButton3)を削除したい     ☆問題の部分です(ERROR:「JButton3を解決できません」) //               p10.remove(JButton3);     ☆こっちだとOK (varidate後、表示されていない)                 p10.remove(3);//owner.list(System.out)参照                 owner.add(p10);                 owner.validate();             } else if (cmd.equals("btn_b02")) {             //別の処理hogehoge             } } ■Class Mondai package test; public Container drawPanel(Menu frame)throws Exception {     JPanel p10 = new JPanel();     ~(省略)遷移画面のパネル・部品・レイアウトに関する宣言~     p10.add(JButton1);     p10.add(JButton2);     p10.add(JButton3);     return p10; }

    • ベストアンサー
    • Java
  • イベント処理

    javaでプログラムを作り始めて間がないのですが、イベント処理に関して行き詰ってしまいました。望む動作は、メニュー→ゲーム→じゃんけんと選択すると、初期の状態として「じゃんけん・・・・」という文字とボタンが表示され、どれかボタンを押すと対応して「~ボタンが押されました」と表示させたいのですが、作ったプログラムだと、ボタンを押しても反応しません。後々メニューにもいくつかアイテムを追加したり、最終的にはコンピュータとじゃんけんをするプログラムを書きたいと思っています。ifを使った方法しか思いつかないのですが、どこがおかしいのでしょうか? import javax.swing.*; import java.awt.event.*; import java.awt.BorderLayout; public class question extends JFrame implements ActionListener{       JLabel label1;       JPanel p2;       public static void main(String[] args){            question test = new question("質問");            test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            test.setVisible(true);       }       question(String title){            setTitle(title);            setBounds( 10, 10, 300, 250);            JMenuBar menuBar = new JMenuBar();            JMenu menu = new JMenu("メニュー");            JMenu submenu = new JMenu("ゲーム");            JMenuItem subitem1 = new JMenuItem("じゃんけん");            subitem1.addActionListener(this);            subitem1.setActionCommand("Start");            submenu.add(subitem1);            menu.add(submenu);            menuBar.add(menu);            setJMenuBar(menuBar);            JPanel p1 = new JPanel();            p2 = new JPanel();            label1 = new JLabel("");            JButton btn1 = new JButton("グー");            btn1.addActionListener(this);            btn1.setActionCommand("goo");            JButton btn2 = new JButton("チョキ");            btn2.addActionListener(this);            btn2.setActionCommand("cyoki");            JButton btn3 = new JButton("パー");            btn3.addActionListener(this);            btn3.setActionCommand("paa");            p1.add(label1);            p2.add(btn1);            p2.add(btn2);            p2.add(btn3);            getContentPane().add(p1, BorderLayout.PAGE_START);            getContentPane().add(p2, BorderLayout.PAGE_END);            p2.setVisible(false);      }      public void actionPerformed(ActionEvent e){            String cmd = e.getActionCommand();            if (cmd.equals("Start")){                 p2.setVisible(true);                 label1.setText("じゃんけん・・・・");                 if (cmd.equals("goo")){                      label1.setText("グーが押されました");                 }else if (cmd.equals("cyoki")){                      label1.setText("チョキが押されました");                 }else if (cmd.equals("paa")){                      label1.setText("パーが押されました");                 }            }       } }

    • ベストアンサー
    • Java
  • Javaの課題について質問です。パート(2)

    import java.io.Console; public class A23_exec { public static void main(String args[]){ try{ A23_StrArray list = new A23_StrArray(); System.out.println("-------------------------------処理メニュー-------------------------------"); System.out.println("| 01・・・要素を追加 02・・・指定のインデックスの要素を上書き|"); System.out.println("| 03・・・指定インデックスの要素を表示 04・・・全ての要素を削除 |"); System.out.println("| 05・・・全ての要素を表示 06・・・全てのインデックス数を表示 |"); System.out.println("| 07・・・全ての要素を昇順でソート 08・・・全ての要素を降順でソート |"); System.out.println("| 09・・・ファイルの読込み 10・・・ファイルを追記して読込み |"); System.out.println("| 11・・・ファイルを上書きして読込み 12・・・ファイルに書込み |"); System.out.println("| 13・・・ファイルに追記して書込み 14・・・ファイルに上書き書込み |"); System.out.println("| 99・・・処理を終了 |"); System.out.println("--------------------------------------------------------------------------"); System.out.println(" ※処理メニュー以外のNoを入力しても処理出来ませんので注意して下さい。"); System.out.println(" ※全て半角英数字で入力して下さい。"); System.out.println(" ↓処理Noを入力して下さい。↓"); while(true){ System.out.println("-----処理No-----"); String inputData = input(); if(inputData.equals("99")){ System.out.println("終了"); System.exit(0); break ; } else if(inputData.equals("01")){ System.out.println("要素追加"); inputData = input(); list.add(inputData); } else if(inputData.equals("02")){ System.out.println("指定インデックスの要素の上書き"); inputData = input(); list.set(0,inputData); System.out.println(list.toString()); } else if(inputData.equals("03")){ System.out.println("指定インデックスの要素を表示"); inputData = input(); System.out.println(list.get(0)); } else if(inputData.equals("04")){ System.out.println("全ての要素を削除"); list.clear(); } else if(inputData.equals("05")){ System.out.println("全ての要素を表示"); list.getAll(); System.out.println(list.getAll()); } else if(inputData.equals("06")){ System.out.println("全てのインデックス数を表示"); int item =list.getIndex(); System.out.println(item); } else if(inputData.equals("07")){ System.out.println("全ての要素を昇順でソート"); list.sort(list.ASC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("08")){ System.out.println("全ての要素を降順でソート"); inputData = input(); list.sort(list.DESC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("09")){ System.out.println("ファイルの読み込み"); inputData = input(); list.readFile(inputData); } else if(inputData.equals("10")){ System.out.println("ファイルを追記して読み込み"); inputData = input(); list.readFile(inputData,true); } else if(inputData.equals("11")){ System.out.println("ファイルを上書きして読み込み"); inputData = input(); list.readFile(inputData,false); } else if(inputData.equals("12")){ System.out.println("ファイルに書き込み"); inputData = input(); list.writeFile(inputData); } else if(inputData.equals("13")){ System.out.println("ファイルに追記して書き込み"); inputData = input(); list.writeFile(inputData,true); } else if(inputData.equals("14")){ System.out.println("ファイルに上書きして読み込み"); inputData = input(); list.writeFile(inputData,false); } else{ System.out.println("処理Noが違います。"); } } }catch(Exception e){ System.out.println(e); } } private static String input(){ try{ Console cns = System.console(); //String input= cns.readLine(); return cns.readLine(); } catch(Exception e){ System.out.println(e); return ""; } } } 宜しくお願い致します。

  • 独自クラスをVectorに格納してindexOfで検索する方法

    ewuals(myclass)、ewuals(int)とhash()を実装した、自分で作成したクラスがあります。 そのクラスをVectorに格納して、indexOf()やlastIndeOf()で検索しようとしていますが、-1が返されます。 for()ループとequals()を使用して自分で検索すると、意図した値が帰ってくるのですが。どこがいけないのでしょうか? ===>java -version java version "1.6.0_11" Java(TM) SE Runtime Environment (build 1.6.0_11-b03) Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing) import java.util.Vector; ===>type equaltest.java class equaltest { public static void main(String args[]) { myclass myc[] = new myclass[8]; myc[0] = new myclass(false, 10 , 3); myc[1] = new myclass(false, 10 , 4); myc[2] = new myclass(false, 20 , 3); myc[3] = new myclass(false, 20 , 4); myc[4] = new myclass(true, 10 , 3); myc[5] = new myclass(true, 10 , 4); myc[6] = new myclass(true, 20 , 3); myc[7] = new myclass(true, 20 , 4); //Vectorに追加 Vector<myclass> myVec = new Vector<myclass>(); for (int lp1 = 0; lp1<myc.length;lp1++){ myVec.add(myc[lp1]); } //Vectorの中身を表示 System.out.println(myVec.toString()); System.out.println("------------"); System.out.println("Vector.indexOfの返す値は・・・"); System.out.println("10\t:"+myVec.indexOf(10)); System.out.println("20\t:"+myVec.indexOf(20)); System.out.println("3\t:"+myVec.indexOf(3)); System.out.println("4\t:"+myVec.indexOf(4)); myclass mytmp = new myclass(true, 20 , 4); //mytmpの中身を表示 System.out.println(mytmp.toString()); System.out.println("mytmp\t:"+myVec.indexOf(mytmp)); System.out.println("自分でequals比較すると・・・"); System.out.println("mytmp?2\t:"+mytmp.equals(myc[2])); System.out.println("mytmp?3\t:"+mytmp.equals(myc[3])); System.out.println("mytmp?4\t:"+mytmp.equals(myc[4])); System.out.println("mytmp(10):"+mytmp.equals(10)); System.out.println("mytmp(20):"+mytmp.equals(20)); System.out.print("自分でVectorを検索すると・・・["); for (int lp1 = 0; lp1<=myVec.size();lp1++){ if(lp1 == myVec.size()){ System.out.println("-1(not found)]"); break; } if(mytmp.equals((myclass)(myVec.elementAt(lp1))) == true){ System.out.println("" + lp1 + "]"); break; } } } } ===>type myclass.java public class myclass{ boolean flg; int valurT; int valurF; // myclass(){ flg = false; valurT = 20; valurF = 5; } myclass(boolean af, int avalurT, int avalurF){ flg = af; valurT = avalurT; valurF = avalurF; } // public boolean equals(int myArg){ if(flg){ return (valurT == myArg); }else{ return (valurF == myArg); } } // public boolean equals(myclass argmycls){ if(flg){ return (valurT == argmycls.valurT); }else{ return (valurF == argmycls.valurF); } } public String toString(){ return "[flg:"+flg+" valurT:"+valurT+" valurF:"+valurF+"]"; } public int hashCode(){ if(flg){ return (valurT); }else{ return (valurF); } } }

    • ベストアンサー
    • Java
  • エラーが出ます

    エラーが出ますがどこを直したらいいかわかりません。 できれば手直しお願い致します。 import java.io.*; import java.util.*; pubic class A23_exec { public static void main(String args[]) { try { A23_StrArray strAry = new A23_StrArray(); while(true) { //処理Noの入力を促す System.out.println("----------処理No?----------"); String inputData = input(); //終了処理 if(inputData.equals("99")) { System.out.println("終了"); break; } //追加(ADD)処理 else if(inputData.equals("01")) { System.out.println("追加内容?"); inputData = input();//コマンドラインからの入力 strAry.add(inputData); } //上書き処理 else if(inputData.equals("02")) { System.out.println("上書き内容?"); inputData = input();//コマンドラインからの入力 strAry.set(1, inputData); System.out.println(strAry.toString()); } //要素の取得処理 else if(inputData.equals("03")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 System.out.println(strAry.get(1)); } //要素のクリア処理 else if(inputData.equals("04")) { System.out.println("クリア"); inputData = input();//コマンドラインからの入力 strAry.clear(); } //全ての要素の配列処理 else if(inputData.equals("05")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 System.out.println(strAry.getAll()); } //要素数の取得 else if(inputData.equals("06")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 System.out.println(strAry.getIndex()); } //昇順処理 else if(inputData.equals("07")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.sort(strAry.ASC_SORT); } //降順処理 else if(inputData.equals("08")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.sort(strAry.DESC_SORT); } //読み込み処理 else if(inputData.equals("09")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.readFile(inputData); } //読み込みの追記処理 else if(inputData.equals("10")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.readFile(inputData); } //読み込み上書き処理 else if(inputData.equals("11")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.readFile(inputData, true); } //書き込み処理 else if(inputData.equals("12")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.writeFile(inputData, false); } //書き込みの追記処理 else if(inputData.equals("13")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.writeFile(inputData, true); } //書き込みの上書き処理 else if(inputData.equals("14")) { System.out.println("取得内容?"); inputData = input();//コマンドラインからの入力 strAry.writeFile(inputData, false); } } } catch(Exception e) { System.out.println("e"); } } /** * コマンドラインからの入力を受け取り、文字列として戻す * @param:indexインデックス * @return:取得した要素 */ private static String input() { //入力用オブジェクト BufferedReader cinBuff = new BufferedReader(new InputStreamReader(System.in)); //コンソールからの文字入力 try { //入力用オブジェクトが文字入力を受付、それをStringクラスに代入 return cinBuff.readLine(); } catch(IOException e) { System.out.println("IOExceptionエラー発生!!"); } } }

  • swingのラジオボタンについて

    たびたびすみません!! (1)ラジオボタンのアクションをどのように渡したらよいでしょうか? fontcolorActionをどこかにadd()しなければなりませんが group.add(fontcolorAction); button1.add(fontcolorAction); どちらもできません(泣 (2)setForeground()を使うと全部の文字の色が変換されてしまいます。選択した文字列の色や文字の大きさだけ変換するメソッドなどもないでしょうか?? (3)getContentPane().setBackground(Color.WHITE);を使うと表示されるウィンドウの中身が白色になると思うんですが薄紫色のままです。どうしたらよいでしょうか? public class NotePad3 extends JFrame { JDesktopPane desktop; JTextArea editArea = new JTextArea(); ButtonGroup group = new ButtonGroup(); JRadioButton button1 = new JRadioButton("black"); JRadioButton button2 = new JRadioButton("blue"); public static void main(String[] args){ NotePad3 frame = new NotePad3(); frame.setVisible(true); } public NotePad3(){ desktop = new JDesktopPane(); FontColorAction fontcolorAction = new FontColorAction(); JMenuBar mb = new JMenuBar(); JMenu sub11 = new JMenu("色"); group.add(button1); group.add(button2); sub11.add(button1); sub11.add(button2); getContentPane().add(desktop,BorderLayout.CENTER); getContentPane().setBackground(Color.WHITE); } class FontColorAction extends AbstractAction{ FontColorAction(){ } public void actionPerformed(ActionEvent e){ NoteFrame inframe = (NoteFrame)desktop.getSelectedFrame(); JTextArea ta = inframe.getTextArea(); if(e.getSource() == button1){ ta.setForeground(Color.black); }else if(e.getSource() == button2){ ta.setForeground(Color.blue); } } }

    • ベストアンサー
    • Java
  • javaのmainの中のループに割込を掛ける

    毎度、お世話になります。 javaのmainの中のループに割込を掛ける方法をお教えください。 添付コードの『Thread.currentThread().interrup()』は、旨く機能しません。 以上、宜しくお願いします。 =========== import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class T_try_loop extends JFrame{ JFrame frame=new JFrame(); T_try_loop(){ System.out.println("aaaa"); JPanel p1=new JPanel(); JButton button1=new JButton("button1"); button1.addActionListener(new TimButton1()); p1.add(button1); getContentPane().add(p1, BorderLayout.CENTER); } public static void main(String args[]){ T_try_loop frame=new T_try_loop(); frame.setTitle("TTTT"); frame.setBounds(10,10,400,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); for(int j = 0;j < 80; j++){ try{ Thread.sleep(80); System.out.print("*"); } catch(InterruptedException e){ System.out.println(": main_loopに、今割り込まれました"); } } }//public static void main public class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ String cmd =ae.getActionCommand(); if(cmd.equals("button1")){ Thread.currentThread().interrupt(); System.out.println("Button clicked"); } } }//public class TimButton1 }

    • ベストアンサー
    • Java
  • コマンドプロンプトでひらがなの入力が出来ません。

    普段グーグル日本語入力を使っています。 OS XPsp2 import java.io.*; class Mojiretuate { public static void main(String[] args) throws IOException { String str = "こんにちは"; String str2; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列当てゲームです。"); System.out.println("答えは何かのあいさつです。"); for(;;){ System.out.println("\n入力"); str2 = br.readLine(); System.out.println("入力文字列の長さ:" + str2.length()); if(str.equals(str2)){ System.out.println("正解です"); break; } else if(str2.length() > str.length()){ System.out.println("長すぎます。"); } else if(str2.length() == str.length()){ System.out.println("長さはあっています。"); } else{ System.out.println("短すぎます。"); } } System.out.println("終了"); } }

    • ベストアンサー
    • Java
  • addActionListenerについて

    ボタンbtn1をクリックした時の処理をさせたいと思っています。 そこで、addActionListenerを使って新しくクラスを作っています。 そこでe.getSouce()==btn1とすればbtn1が押された時の処理が通ると思ったのですが、 System.out.println()で確認してもどうも処理が通っていません。 コンストラクタ内でbtn1.addActionListenerとすればうまくいきましたが、 クラスごとに分けていきたいのであまりそういうことはしたくありません。 新しくクラスを作る方法でも出来ると思ったのですが、このソースでは何が原因で動かないのでしょうか? import java.awt.*; import java.awt.event.*; public class click2 extends Frame{ public static void main(String args[]){ click2 myfra=new click2(); myfra.show(); } Button btn1=new Button("start"); click2(){ setSize(300,200); setBackground(Color.white); setLayout(null); btn1.setBounds(50,70,40,20); add(btn1); } class Listener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource() == btn1){ System.out.println("btn1"); } } } }

  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java

専門家に質問してみよう