JAVAイベント処理について - ボタンをクリックすれば表示されている色が変わるプログラム

このQ&Aのポイント
  • JAVAイベント処理について、ボタンをクリックすれば表示されている色が変わるプログラムを作成しています。
  • パネルにボタンを4つ配置し、ボタンをクリックすると色が変わるようにします。
  • 現在はボタンが横に並んで表示されていますが、ボタンを縦に並べたい場合のプログラムが分かりません。
回答を見る
  • ベストアンサー

JAVA イベント処理について

ボタンをクリックすれば表示されている色が変わるというプログラムを作っています。 それで、パネルを作ってそこにボタンを4つくっつけているのですが、 Panel p=new Panel(); for(i=0;i<N;i++) p.add(bn[i]); p.setBackground(Color.orange); add(p,"South"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} }); } 上のような感じでsouth=下にボタンが横に4つならんで表示されるようになっているのですが、 ボタンを縦に並べたいのですがプログラムがわかりません。 分かる方教えてください。お願いします。

  • atomz
  • お礼率80% (80/100)

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

  • ベストアンサー
  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

FlowLayoutではPanel の横幅分だけ横に並んでしまいます。GridBagLayoutを使ってください。 http://lecture.ecc.u-tokyo.ac.jp/~cichiji/cp-01-09-3.html

参考URL:
http://www.dmz.hitachi-sk.co.jp/Java/Tech/gui2D/gui/GridBagLayout.html
atomz
質問者

お礼

ありがとうございます。できました!!

関連するQ&A

  • Windowを閉じるときの処理の構造

     Java初心者です。  JavaのGUIプログラムでウインドウを閉じるときの処理で、解説書・解説サイトでは以下のようなサンプルをよく見かけますが、構造が複雑すぎてよく理解できません。 //インスタンス化とか色々省略 JFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });  特に、WindowAdapter(){~}の部分は、解説書を一通り探しても、文法事項として見つからないのですが、これはどういった文法なのでしょうか?  よろしくお願いします。

  • ダイアログ

    今、テキストエディタを作ろうと試みております。(プログラムは、はじめたばかりで、まだままなりませんが。) メニューをフレームに付け、そのサブメニューのひとつをクリックすると、ダイアログを作って表示するメソッドを作り、それを呼び出して表示するようにしました。そのダイアログが閉じるボタンから閉じられません。 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } }); これをダイアログを作るメソッドの中に書いたら、閉じられると思ったんですが、できませんでした。何か、他のところに問題があるのでしょうか? わかりにくい質問になってしまいすみません。

  • ウィンドウが閉じられる直前の処理

    addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); private void exitForm(java.awt.event.WindowEvent evt) { if (ある状態だった時) { return; } System.exit(0); } 上記ソースの様にある状態だった時にウィンドウを閉じない様に したいと思っています。returnをすれば、大丈夫かと思ったら、 綺麗にウィンドウが閉じてしまいました。 どのようにすれば実現出来ますでしょうか?お願いします。

    • ベストアンサー
    • Java
  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • Javaのマウスイベントについて

    閲覧ありがとうございます、Java初心者です。 現在Javaの勉強をしており、マウスの座標を取得しその座標に座標を描画 するプログラムを作っているのですが、どうしても上手くいきません・・・以下が ソースです↓ import java.awt.*; import java.awt.event.*; public class test01 extends Frame { int x, y; public static void main(String[] args) { new test01(); } test01() { super("FrameTest"); //フレーム名 setSize(300, 300); //サイズを設定 MyCanvas mc = new MyCanvas(); //グラフィック用メソッドをインスタンス化 add(mc); //フレームに描画 addMouseMotionListener(new getMouse_position()); System.out.println("(" + x + "," + y + ")"); setVisible(true); //フレームを表示 addWindowListener(new Close()); //クローズ処理 } /*** グラフィック描画用クラス ***/ public class MyCanvas extends Canvas { public void paint(Graphics g) { g.drawString("(" + x+ "," + y + ")", x, y); } } /*** マウス操作用クラス ***/ public class getMouse_position extends MouseAdapter { public void mouseMoved(MouseEvent ev) { x = getX(); //マウスのx座標を取得 y = getY(); //マウスのy座標を取得 repaint(); } } } /*** クローズ用クラス ***/ class Close extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } これを実行すると、ずっと(0, 0)のままでマウスの座標を読み取ってくれません・・・何故なんで でしょうか?

    • ベストアンサー
    • Java
  • Label を リスナーと結びつける方法

    フレーム上に (ボタンやリストやチェックボックスではなくて) ラベルを用いて、ラベルを押すことにより 背景が変わるプログラムを作りたいのですが どのようにイベント処理すれば、うまくいくのでしょうか。 プログラムは以下のように作りましたがイベントリスナを どのように加えればいいのかがわかりません>< よろしくお願いしますm(_ _)m import java.awt.*; import java.awt.event.*; public class Test{ public static void main(String args[]){ MyFrame f=new MyFrame("Test"); f.setVisible(true); } } class MyFrame extends Frame{ Label red, green, blue; MyFrame(String s){ super(s); setSize(200,200); setLocation(100,150); setLayout(new FlowLayout(FlowLayout.CENTER)); add(red=new Label("■")); red.setForeground(Color.red); add(green=new Label("■")); green.setForeground(Color.green); add(blue=new Label("■")); blue.setForeground(Color.blue); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } }

    • ベストアンサー
    • 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のプログラムについて

    初めまして。java初心者のものです。 コンピュータとじゃんけんをするというプログラムをつくりたいのですが、 コンパイルしたところ、次のようなエラーが出ました。 「シンボルが見つかりません。」 どこをどう直せばよいのでしょうか。お教え願います。 以下が私のプログラムです。 import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.applet.AudioClip; class Zyanken extends YJFrame implements ActionListener{ JButton[] btn; JPanel panel; Zyanken(String s, int w, int h,int b){ super(s,w,h,b); String[] ttl={"グー","チョキ","パー","Exit"}; String[] tips={"グーです","チョキです","パーです","終了します"}; int i; setUp(); Icon[] ic=new Icon[4]; for(i=0;i<4;i++) ic[i]=new ImageIcon("icon"+i+".gif"); btn=new JButton[4]; for(i=0;i<4;i++){ btn[i]=new JButton(ttl[i],ic[i]); btn[i].setToolTipText(tips[i]); btn[i].addActionListener(this); } JPanel p=new JPanel(); for(i=0;i<4;i++) p.add(btn[i]); p.setBackground(Color.pink); pane.add(p,BorderLayout.SOUTH); panel=new JPanel(); pane.add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ int com=(int)(Math.random()*4); if(com==1){ panel.setText("COMはグーです。"); } else if(com==2){ panel.setText("COMはチョキです。"); } else{ panel.setText("COMはパーです。"); } if(e.getSource()==btn){ if(com==1){ panel.setText("あいこです。"); } else if(com==2){ panel.setText("あなたの勝ちです。"); } else{ panel.setText("あなたの負けです。"); } } else if(e.getSource()==btn){ if(com==1){ panel.setText("あなたの負けです。"); } else if(com==2){ panel.setText("あいこです。"); } else{ panel.setText("あなたの勝ちです。"); } } else{ if(com==1){ panel.setText("あなたの勝ちです。"); } else if(com==2){ panel.setText("あなたの負けです。"); } else{ panel.setText("あいこです。"); } } } } 大変恐縮ですが、よろしくお願いします。

  • java 初心者です。

    COMとじゃんけんをし、勝敗を決定するというプログラムを作りたいのですが、 コンパイルしたところ、33行目に「シンボルが見つけられません」というエラーが出ます。 (合計12個のエラーがでます) どこを直せばこのエラーは解決されるのでしょうか。 すいませんが、よろしくお願いします。 以下がプログラムです。 import java.awt.event.*; import java.awt.*; import javax.swing.*; class Zyanken extends YJFrame implements ActionListener{ JButton[] btn; JPanel panel; Zyanken(String s, int w, int h,int b){ super(s,w,h,b); String[] ttl={"グー","チョキ","パー","Exit"}; String[] tips={"グーです","チョキです","パーです","終了します"}; int i; setUp(); Icon[] ic=new Icon[4]; for(i=0;i<4;i++) ic[i]=new ImageIcon("icon"+i+".gif"); btn=new JButton[4]; for(i=0;i<4;i++){ btn[i]=new JButton(ttl[i],ic[i]); btn[i].setToolTipText(tips[i]); btn[i].addActionListener(this); } JPanel p=new JPanel(); for(i=0;i<4;i++) p.add(btn[i]); p.setBackground(Color.pink); pane.add(p,BorderLayout.SOUTH); panel=new JPanel(); pane.add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ int com=(int)(Math.random()*4); if(com==1){ panel.setText("COMはグーです。"); } else if(com==2){ panel.setText("COMはチョキです。"); } else{ panel.setText("COMはパーです。"); } if(e.getSource()==btn){ if(com==1){ panel.setText("あいこです。"); } else if(com==2){ panel.setText("あなたの勝ちです。"); } else{ panel.setText("あなたの負けです。"); } } else if(e.getSource()==btn){ if(com==1){ panel.setText("あなたの負けです。"); } else if(com==2){ panel.setText("あいこです。"); } else{ panel.setText("あなたの勝ちです。"); } } else{ if(com==1){ panel.setText("あなたの勝ちです。"); } else if(com==2){ panel.setText("あなたの負けです。"); } else{ panel.setText("あいこです。"); } } } }

  • Choiceから選択して文字列を取得

    Choiceで選択した項目をテキストフィールドに表示させたいのですが、文字列の取得ができないようです。 お助け下さい。よろしくお願い致します。(;_;) import java.awt.*; import java.awt.event.*; public class ChoiceTest extends Frame implements ItemListener{ TextField jt; Choice ch; Label titleLabel; String cData[]={"サッカー","バレーボール","柔道","水泳","バスケット ボール","野球"}; public static void main(String[] args){ ChoiceTest f=new ChoiceTest(); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);} }); f.setVisible(true); } ChoiceTest(){ setTitle("リストメニュー"); setSize(300,200); titleLabel=new Label("選んでください"); Choice ch=new Choice(); for(int i=0; i<cData.length; i++) { ch.addItem(cData[i]); } ch.addItemListener(this); jt=new TextField("ここに表示"); add(titleLabel,BorderLayout.NORTH); add(ch,BorderLayout.CENTER); add(jt,BorderLayout.SOUTH); } public void itemStateChanged(ItemEvent e) { if (e.getItemSelectable() == ch) { jt.setText(ch.getSelectedItem()); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう