Labelをリスナーと結びつける方法

このQ&Aのポイント
  • Labelとイベントリスナを組み合わせた背景変更プログラムの実装方法を教えてください
  • Labelを押すことで背景色が変わるプログラムの作成方法を教えてください
  • Labelを使って背景が変わるプログラムを作りたいですが、イベント処理の方法がわかりません
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • omni2
  • ベストアンサー率53% (33/62)
回答No.1

Javaは勉強中の身で本を参考にかきます。こんな感じでいいのでしょうか? 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); red.setBackground(Color.red); red.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ setBackground(Color.red); } }); add(green=new Label("■")); green.setForeground(Color.green); green.setBackground(Color.green); green.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ setBackground(Color.green); } }); add(blue=new Label("■")); blue.setForeground(Color.blue); blue.setBackground(Color.blue); blue.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ setBackground(Color.blue); } }); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } }

addected
質問者

補足

こんにちは。 無名内部クラスをつかえばうまくいくのですね^^ ありがとうございます。 無名内部クラスについて質問があるのですが、 普通のメソッドの場合 //---------------------------------------------- import java.awt.*; public class Sample01{ public static void main(String args[]){ MyFrame f = new MyFrame(); f.changeBack(); f.show(); } } class MyFrame extends Frame{ MyFrame(){ setSize(100,100); setLocation(100,100); } public void changeBack(){ setBackground(Color.pink); } } //---------------------------------------------- このchangeBack()メソッドにおいて setBackground(Color.pink); は 言い換えれば this.setBackground(Color.pink); と自分自身のクラスの参照値を渡しているのと思うのですが、(この記述でもエラーは出ない) 無名内部クラスを用いて以下↓のように //------------------------------------------------ import java.awt.*; import java.awt.event.*; public class Sample01{ public static void main(String args[]){ MyFrame f = new MyFrame(); f.show(); } } class MyFrame extends Frame{ MyFrame(){ setSize(100,100); setLocation(100,100); addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ setBackground(Color.red) } }); } } //------------------------------------------------ 記述した場合 setBackground(Color.red);を this.setBackground(Color.red); に変更するとエラーが出ます。 MyFrameオブジェクト(無名クラスを内部に持つクラス)の参照値を、無名内部クラスは引数無しで どのように参照しているのでしょうか。 その仕組みはどのようになっているのでしょうか。

関連するQ&A

  • java.awt.Label を縁取り表示したい

    Javaバージョンは、JDK-1.2.2_017 です。 (このバージョンじゃないと駄目なんです) ラベルの表示をするのにjava.awt.Labelを使用しているのですが、 ・Labelの縁取り(枠のようなもの) ・ボタンのように浮き上がらせる というようなことが、Labelクラスで可能でしょうか。 ラベルの見た目を変えたいので、どなたかご存知のかたいらっしゃいましたら 教えてください。お願いします。 import java.applet.Applet; import java.awt.*; public class label1 extends Applet { public void init(){ Label Lab = (Label)add(new Label("Label1" , Label.CENTER)); Lab.setText("test"); setBackground(Color.blue); add(Lab); } }

  • Graphicsクラスを使って描画履歴を残して、しかも色も選択しながら描画を行いたい

    以下のようなドロープログラムを作ってみたのですが 描画色を変更して再描画すると前の描画履歴が消えてしまいます 描画色を変更しても以前の描画履歴の消えないようにするには どのようにすればいいのでしょうか。 文字数制限によりプログラムをアップできませんでしたので一部を記述させていただきます。 グローバルなカラーオブジェクトを用意し class Globe{ static mycol=Color.white; } 二つのラベルを用意して Label red=new Label("■"); Label green=new Label("■"); ラベルそれぞれにマウスリスナーを登録して red.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.red; } }); green.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.green; } }); マウスドラッグによる座標取得を行い public void mouseDragged(MouseEvent e){ x=e.getX(); y=e.getY(); repaint(); } 二つの色を使い分けて描画できるようにしました。 public void update(Graphics g){ setForeground(Globe.mycol); g.fillOval(x-3,y-3,6,6); }

    • ベストアンサー
    • Java
  • Enterキーでボタンを押すにはどうすればいいのでしょうか

    色を指定するチェックボックスがあり,表示ボタンで指定された色の混色を表示するプログラムです. このプログラムに,Enterキーの入力に表示ボタンを押したのと同じ効果をもたせたいのですが,どうすればいいでしょうか. また,requestFocusInWindow()をどこに挿入すればうまくいくのでしょうか. *************************************************************** import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Q1 extends Applet implements ActionListener { // チェックボックス3つとボタン1つ Checkbox cbx1, cbx2, cbx3; int red = -1, green, blue; Button btn; public void init() { cbx1 = new Checkbox("Red"); cbx2 = new Checkbox("Green"); cbx3 = new Checkbox("Blue"); add(cbx1); add(cbx2); add(cbx3); btn = new Button("Paint"); btn.addActionListener(this); add(btn); addKeyListener(new KeyAdapter() { public void KeyPressed(KeyEvent ke) { if (ke.getKeyCode() != KeyEvent.VK_ENTER) return; SetColor(); repaint(); } }); } // ボタンを押したとき public void actionPerformed(ActionEvent e) { SetColor(); repaint(); } // 色の設定 public void CheckColor() { if (cbx1.getState()) red = 255; else red = 0; if (cbx2.getState()) green = 255; else green = 0; if (cbx3.getState()) blue = 255; else blue = 0; } // 色付き長方形の表示 public void paint(Graphics g) { if (red != -1) { g.setColor(new Color(red, green, blue)); g.fillRect(10, 50, getSize().width - 20, getSize().height - 40); } } } *******************************************************************

    • ベストアンサー
    • Java
  • ペイントソフトでキャンバス内にだけにかけるようにしたいです。

    どうしたらいいのかわからいので、何かヒントでiいので教えてください。 import java.applet.*; import java.awt.*; import java.awt.event.*; /* <APPLET CODE ="Mous" WIDTH = 500 HEIGHT = 300> </APPLET> */ public class Mous extends Applet { Graphics g; int point_x, point_y; Button color_black,color_red,color_blue,clear; public void init() { g = getGraphics(); setLayout(null); addMouseListener(new MouseAdapter () { public void mousePressed(MouseEvent e){ point_x = e.getX(); point_y = e.getY(); } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { g.drawLine(point_x,point_y,e.getX(),e.getY()); point_x = e.getX(); point_y = e.getY(); } }); color_black = new Button("黒"); color_black.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.black); } }); color_red = new Button("赤"); color_red.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.red); } }); color_blue = new Button("青"); color_blue.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.setColor(Color.blue); } }); clear = new Button("クリアー"); clear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { g.clearRect(0,0,500,300); } }); add(color_black); add(color_red); add(color_blue); add(clear); } }

  • finalの意味

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ExerciseD8L1{ public static void main(String args[]){ final JFrame myFrame = new JFrame(); myFrame.getContentPane().setLayout(new BorderLayout()); final JLabel myLabel = new JLabel(); JPanel myPanel = new JPanel(); myFrame.getContentPane().add(myLabel,BorderLayout.CENTER); myFrame.getContentPane().add(myPanel,BorderLayout.NORTH); JButton btn1 = new JButton("btn1"); btn1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ myLabel.setText("btn1がクリックされました"); } }); }); myPanel.add(btn1); myFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); myFrame.setSize(400,100); myFrame.setVisible(true); } } これで、finalをつけないとコンパイルできません。 なぜ、fianlが必要なんでしょう。 どのようなときにfinalを用いるのでしょう。 お願いします。

    • ベストアンサー
    • Java
  • javaのボタン表示等に関する質問

    下記のコードはフォームをNORTH、CENTER、SOUTHEに分割して、それぞれのpaneに ラベルとボタンを表示するものです。 Q1)myFrame.setBounds(350,0, total_x, total_y)をコンストラクターの最初に記述しますと  フォームの表示が正常でなく、コンストラクターの最後では、正常に行なわれます。  この理由等について、コメント頂けますと有り難いです。 Q2)mainに記述してある、下記のコードは無くても、Xでクロースできますが,このコード  の記述は正しいでしょうか GridLayout_new frame = new GridLayout_new(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 以上お手数ですが、コメント頂けますと大変助かります。 //============================================= import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; public class GridLayout_new extends JFrame{ int panelA_x=200, panelA_y=50; int panelB_x=200, panelB_y=200; int panelC_x=200, panelC_y=50; int total_x=panelA_x; int total_y=panelA_y+panelB_y+panelC_y; public static void main(String[] args){ GridLayout_new frame = new GridLayout_new(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } GridLayout_new(){ JFrame myFrame=new JFrame(); myFrame.setTitle("panelA"); // myFrame.setBounds(350,0, total_x, total_y); //正常なformの表示が出来ない myFrame.setVisible(true); LineBorder border = new LineBorder(Color.BLACK, 1, true); //======================== JLabel button1=new JLabel("Label1"); GLabel_Layout(button1, border); JButton button2 = new JButton("button2"); button_Layout(button2, border); //======================== JLabel button3=new JLabel("Label3"); GLabel_Layout(button3, border); JButton button4 = new JButton("button4"); button_Layout(button4, border); //======================== JLabel button5=new JLabel("Label5"); GLabel_Layout(button5, border); JButton button6 = new JButton("button6"); //======================== JLabel button7=new JLabel("Label7"); GLabel_Layout(button7, border); JButton button8 = new JButton("button8"); //======================== JLabel button9=new JLabel("Label9"); GLabel_Layout(button9, border); JButton button10 = new JButton("button10"); button_Layout(button10, border); //======================== JLabel button11=new JLabel("Label11"); GLabel_Layout(button11, border); JButton button12 = new JButton("button12"); button_Layout(button12, border); //================================== JPanel p1 = new JPanel(); GridLayout layout1 = new GridLayout(2,2); //2行、2列の設定 layout1.setHgap(2); layout1.setVgap(10); p1.setLayout(layout1); p1.setBackground(Color.GREEN); p1.add(button1); p1.add(button2); p1.add(button3); p1.add(button4); myFrame.setSize(panelA_x, panelA_y); myFrame.getContentPane().add(p1, BorderLayout.NORTH); //============================== JPanel p2 = new JPanel(); GridLayout layout2 = new GridLayout(2,2); //2行、2列の設定 layout2.setHgap(2); layout2.setVgap(10); p2.setLayout(layout2); p2.setBackground(Color.GREEN); p2.add(button5); p2.add(button6); p2.add(button7); p2.add(button8); myFrame.setSize(panelB_x, panelB_y); myFrame.getContentPane().add(p2, BorderLayout.CENTER); //================================== JPanel p3 = new JPanel(); GridLayout layout3 = new GridLayout(2,2); //2行、2列の設定 layout3.setHgap(2); layout3.setVgap(10); p3.setLayout(layout3); p3.setBackground(Color.GREEN); p3.add(button9); p3.add(button10); p3.add(button11); p3.add(button12); myFrame.setSize(panelC_x, panelC_y); myFrame.getContentPane().add(p3, BorderLayout.SOUTH); myFrame.setBounds(350,0, total_x, total_y); //正常なformの表示 } //constructor void GLabel_Layout(JLabel label, LineBorder border){ label.setPreferredSize(new Dimension(80,20)); label.setBorder(border); label.setBackground(Color.lightGray); label.setOpaque(true); } void button_Layout(JButton button, LineBorder border){ button.setPreferredSize(new Dimension(80,20)); button.setBorder(border); } } //main class....GridLayout_new

    • ベストアンサー
    • Java
  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • 下のソースを参考書をそのまま書いたのですが

    下のソースを参考書をそのまま書いたのですが eclipse環境だと f.show(); のところが推薦されない使われ方 として実行できません 無理やり動作させたところ、エラーが返ってきました どうすれば、f.show(); が有効にできるでしょうか? import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class window { public static void main( String[] args ) { AppFrame f = new AppFrame(); f.setSize( 200, 200 ); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e) { System.exit(0); } } ); f.show(); } } class AppFrame extends Frame implements ActionListener { Button b1, b2; labelWindow window; AppFrame() { setLayout( new FlowLayout() ); b1 = new Button( "Display the window" ); add(b1); b1.addActionListener( this ); b2 = new Button( "Hide the window" ); add(b2); b2.addActionListener( this ); window = new labelWindow(this); window.setSize( 300,200 ); window.setLocation( 300, 300 ); } public void actionPerformed( ActionEvent event ) { if( event.getSource() == b1 ) { window.setVisible(true); } if( event.getSource() == b2 ) { window.setVisible(false); } } } class labelWindow extends Window { Label label; labelWindow( AppFrame af ) { super( af ); setLayout( new FlowLayout() ); label = new Label( "Hello from Java!" ); add( label ); } public void paint( Graphics g ) { int width = getSize().width; int heigth = getSize().heigth; g.drawRect( 0, 0, --width, --heigth ); } }

    • ベストアンサー
    • Java
  • アップレットのアクションリスナーが動作しません

     アップレットにアクションリスナーをつけて、アップレットとキャンバスにアクションが来るように 下の様なコードを書いてやりましたがうまく動作しません。どこがまずいのでしょうか、宜しくお願 いします。  ・mouseClickedするとアプレットに四角を書くようにしていますが、最初に表示されてしまいます。  ・mouseEnteredするとキャンバスに四角を書くようにしていますが、最初には表示されず、 mouseEnteredでも四角を書きません。  ・"cs.paint(g);"での書き方が悪いのでしょうか。「gを解決できません」と表示されます。   "paint(g);"としても同じです、"mouseClicked"の中でも同じ書き方ですが、   「gを解決できません」というエラー表示は出ていません。  原因が全く分かりません、どこをどのように修正したら良いのでしょうか、宜しくお願い致します。 ================================================================== import java.applet.Applet; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; public class ActionTest extends Applet implements MouseListener { Canvas cs ; public void init() { this.setBackground(Color.pink); Canvas cs = new Canvas( ) ; cs.setBackground(Color.green); cs.setSize( 100 , 100 ) ; this.add( cs ) ; this.addMouseListener( this ) ; } public void paint(Graphics g) { g.fillRect( 50 , 50 , 10 , 10 ) ; } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics() ; setBackground( Color.cyan ) ; paint(g) ; repaint(); } public void mouseEntered(MouseEvent e) { cs.setBackground( Color.orange ) ; cs.paint(g) ; repaint(); } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } } ==================================================================

    • ベストアンサー
    • Java
  • テキストボックスの値が変数に代入できない(2)

    お早うございます。 java初心者です、宜しくお願いします。 下記のような、アプレットのテキストボックスから値をとり 計算結果を表示するプログラムを書いてやりましたが、 値(実数値)がうまく変数に代入されていません。 この原因が分かりません、どこが悪いのか皆様方のご教示宜しくお願いいたします。 文法上のエラーは出ていません、AWTとswingとの混在は理解は出来ていますが、それとは別の箇所で原因があると思いますが、解決できません、宜しくお願いいたします。 ============================================================================== try { lon = Double.parseDouble(jta00.getText()) ; sita = Double.parseDouble(jta0.getText()) ; Zb = Double.parseDouble(jta1.getText()) ; Zg = Double.parseDouble(jta2.getText()) ; arfa = Double.parseDouble(jta3.getText()) ; Gf = Double.parseDouble(jta4.getText()) ; Vo = Double.parseDouble(jta5.getText()) ; } catch(Exception ee) { System.out.println( "lon = " + lon ) ; System.out.println( "sita = " + sita ) ; System.out.println( "Zb = " + Zb ) ; System.out.println( "Zg = " + Zg ) ; System.out.println( "arfa = " + arfa ) ; System.out.println( "Gf = " + Gf ) ; } //Lavelの作成(TextFieldの右側記事欄) Label lb_longth2 = new Label("(延長(m))"); lb_longth2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_sita2 = new Label("(傾斜)"); lb_sita2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_Zb2 = new Label("(区分係数)"); lb_Zb2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_Zg2 = new Label("(区分係数)"); lb_Zg2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_arfa2 = new Label("(区分係数)"); lb_arfa2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_Gf2 = new Label("(区分係数)"); lb_Gf2.setFont(new Font("SansSerif",Font.BOLD,17)); Label lb_Vo2 = new Label("(速度(m/s))"); lb_Vo2.setFont(new Font("SansSerif",Font.BOLD,17)); //TextAreaの書式設定と貼付け、Lavelの貼付け jta00.setBackground(Color.white); jta00.setForeground(Color.red); jta00.setFont(new Font("Dialog",Font.PLAIN,20)); jta00.setBounds(90,125,100,30) ; //Panel Width lb_longth2.setBounds(200,125,250,20); add(jta00); add(lb_longth2); //(延長(m)) jta0.setBackground(Color.white); jta0.setForeground(Color.red); jta0.setFont(new Font("Dialog",Font.PLAIN,20)); jta0.setBounds(90,160,100,30) ; //sita lb_sita2.setBounds(200,165,250,20); add(jta0); add(lb_sita2); //(傾斜(度)) jta1.setBackground(Color.white); jta1.setForeground(Color.red); jta1.setFont(new Font("Dialog",Font.PLAIN,20)); jta1.setBounds(90,200,100,30) ; //Zb lb_Zb2.setBounds(200,205,170,20); add(jta1); add(lb_Zb2); //係数 jta2.setBackground(Color.white); jta2.setForeground(Color.red); jta2.setBounds(90,240,100,30); //Zg jta2.setFont(new Font("DialogInput",Font.BOLD,20)); lb_Zg2.setBounds(200,245,170,20); add(jta2); add(lb_Zg2);//係数 jta3.setBackground(Color.white); jta3.setForeground(Color.red); jta3.setBounds(90,280,100,30); //arfa jta3.setFont(new Font("Monospaced",Font.ITALIC,20)); lb_arfa2.setBounds(200,285,170,20); add(jta3); add(lb_arfa2);//係数 jta4.setBackground(Color.white); jta4.setForeground(Color.red); jta4.setFont(new Font("Serif",Font.PLAIN,20)); jta4.setBounds(90,320,100,30); //Gf lb_Gf2.setBounds(200,325,170,20); add(jta4); add(lb_Gf2); jta5.setBackground(Color.white); jta5.setForeground(Color.red); jta5.setFont(new Font("sansserif",Font.BOLD,25)); jta5.setBounds(90,360,100,30); //Vo lb_Vo2.setBounds(200,365,170,20); add(jta5); add(lb_Vo2); } public void actionPerformed(ActionEvent ae) { Cwu = 0.65 + 0.009 * sita ; //Follow Window Cwd = 0.71 + 0.016 * sita ; //Against Window Double Er0 = 1.7 * Math.pow(( Zb / Zg ) , arfa ) ; Er2= Er0 * Er0 ; E = Er2 * Gf ; q = 0.6 * E * Vo * Vo ; Wu = q * Cwu ; Wd = q * Cwd ; System.out.println("Wu = " + Wu ) ; System.out.println("Wd = " + W

    • ベストアンサー
    • Java

専門家に質問してみよう