• ベストアンサー

配列要素について

質問させてください。 JLabel[] label = new JLabel[10]; のようにJLabelを配列で定義して、 public void mouseClicked(MouseEvent e) {} マウスイベント(e.getSource)で クリックされたラベルのオブジェクトを取得した場合、このオブジェクトが何番目の配列要素であるかを知りたいのですが、どのようにすればよいのでしょうか? 詳しい方がおりましたら教えてください。

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

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんばんは。 配列要素を先頭から順番に比較する方法が一般的だと思います。 - - - - - - - - - - public void mouseClicked(MouseEvent e) {  for(int i = 0; i < lbls.length; i++) {   if(e.getSource() == lbls[i]) {    JOptionPane.showMessageDialog(this, i + "番目ですね。");    return;   }  } }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yusukey
  • ベストアンサー率56% (17/30)
回答No.2

全てのJLabelに同じMouseListenerをadd しているということですよね? e.getSource()あたりでイベントが発生したオブジェクトを取得できると思います。 「何番目」というのが知りたければ label 変数を for 文で回して比較しましょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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
  • ボタンクリック後パネルを再描画repaintしたい

    ボタンをクリック後にstaticで保持していた値にプラス1して その値をパネルに再描画したいと思っています。 下記のプログラムだとボタンをクリックすると (<1<2<3<4)となって画像と数字が増えてしまいます 行いたいのは数字の部分だけが再描画されて カウントされて<3と表示されるだけになってもらいたい クラス1つ目 import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Sample extends JFrame{ static int value=1; JPanel work = new JPanel(); public static void main(String[] args) { Sample frame = new Sample(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 200, 200, 100); frame.add(frame.createPanel(), BorderLayout.LINE_END); frame.setVisible(true); } public JPanel createPanel() { ImageIcon icon = new ImageIcon("./img/left.gif"); JLabel label = new JLabel(); Cursor c = new Cursor(Cursor.HAND_CURSOR); label.setCursor(c); label.setIcon(icon); JLabel strLabel = new JLabel(); String str = Integer.toString(value); strLabel.setText(str); work.add(label); work.add(strLabel); label.addMouseListener(new myListener()); return work; } class myListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ System.out.print(Sample.value++); createPanel().repaint(); setVisible(true); } } } クラス2つ目 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MouseAdapter implements MouseListener{ public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} }

    • ベストアンサー
    • Java
  • 配列で作ったオブジェクトのイベントを取得するには?

    下記のクラス内で"ary"という10枚のパネルのオブジェクトを配列で作成しました。その"ary"パネルがクリックされた時のイベントを書きたいのですが、私の書いたロジックではイベントを取得できませんでした。 なにか良い方法がありませんでしょうか? public class Main_Panel extends Panel{ int y = 0; Panel ary[] = new Panel[10];   //CONSTRUCT public MainPanel() { for(int i = 0 ; i < 10; i++ ){ ary[i] = new Panel() this.add(ary[i], null); ary[i].setBounds(new Rectangle(0, y, 5, 5)); intYPos = intYPos + 10; ary[i].addMouseListener(new ary_MouseAdapter(this)); } } //パネル(ary)クリックイベント void ary_mouseClicked(MouseEvent e){ } } class ary_MouseAdapter extends java.awt.event.MouseAdapter { Main_Panel adaptee; ary_MouseAdapter(Main_Panel adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.ary_mouseClicked(e, num); } }

    • ベストアンサー
    • Java
  • 「ScrollPane」のイベントの取得方法は?(AWT)

    タイトルのままなのですが、「ScrollPane」のイベント取得方法が知りたいのです。 例えばマウスのイベントを取得する時は下記のようにしますよね。 ************************************************* panel1.addMouseListener(new panel1_MouseAdapter(this)); ************************************************* class panel1_MouseAdapter extends java.awt.event.MouseAdapter { Panel_main adaptee; panel1_MouseAdapter(Panel_main adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.panel1_mouseClicked(e); } } ************************************************* void panel1_mouseClicked(MouseEvent e){ //ここに処理を書く } ************************************************* 「ScrollPane」のスクロールされたとか、↓↑がクリックされたなどスクロール特有のイベントを取得したいのです。

    • ベストアンサー
    • Java
  • 音ファイルの配置場所を変更したい

    イメージラベルをクリックしたらクリック音が鳴るように プログラムしたいです。下記のプログラムでクリック後 クリック音が鳴るようになったのですが音ファイル(sound.wav) の格納ディレクトリがスマートではないと考えています。 というのもクラスファイルが置いてある場所に音ファイルがあるからです。 ですから、この音ファイルをbeepというフォルダを作ってその中に sound.wavファイルを置きたいと考えています。 添付画像に表示されているようなディレクトリに音ファイルを配置したいのです。 ディレクトリをどうプログラムしてもファイルがありませんというエラーが 出てしまいます。 どうすれば、音ファイルのディレクトリを変更できるでしょうか。 教えて下さい。 package audio; import java.applet.Applet; import java.applet.AudioClip; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class ClickSound extends JFrame implements MouseListener{ AudioClip pong; public static void main(String[] args) { ClickSound frame = new ClickSound(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 200, 350, 180); frame.setVisible(true); } public ClickSound() { JPanel panel = new JPanel(); panel.setCursor(new Cursor(Cursor.WAIT_CURSOR)); ImageIcon icon = new ImageIcon("./img/left.gif"); JLabel label = new JLabel(); Cursor c = new Cursor(Cursor.HAND_CURSOR); label.setCursor(c); label.setIcon(icon); panel.add(label); java.awt.Toolkit.getDefaultToolkit().beep(); URL soundUrl = getClass().getResource("./sound.wav"); pong = Applet.newAudioClip(soundUrl); label.addMouseListener(this); this.add(panel, BorderLayout.LINE_END); } public void mouseClicked(MouseEvent e) { // 効果音を鳴らす pong.play(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • 【java】座標の値をテキストファイルに出力

    javaを勉強中の者です。 座標の値をクリックした際にテキストファイルに出力したいのですが、どうしてもうまくできません。 調べてはいるのですが、わかりませんでした。 javaに詳しい方がいらっしゃれば、ご教示ください。 import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class clickpoint extends JFrame implements MouseMotionListener, MouseListener { JLabel label; JPanel panel; public static void main(String args[]) { clickpoint MF = new clickpoint(); MF.setSize(300, 320); MF.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }; }); MF.setTitle("Click Point"); MF.setVisible(true); }; clickpoint() { panel = new JPanel(); panel.addMouseMotionListener(this); panel.setBackground(Color.green); label = new JLabel("座標を指定"); getContentPane().add(panel, BorderLayout.CENTER); getContentPane().add(label, BorderLayout.PAGE_END); } public void mouseMoved(MouseEvent e) { Point point = e.getPoint(); label.setText("x:" + point.x + ",y:" + point.y); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e) {} public void mouseClicked(MouseEvent ec) { try { File OF = new File("d:\\zahyou.txt"); FileWriter FW = new FileWriter(OF, true); FW.write(MakeData(ec.getX(), ec.getY())); FW.close(); } catch (Exception ex) { System.out.println(ex.toString()); System.exit(0); }; }; String MakeData(int x, int y) { String LS = System.getProperty("line.separator"); StringBuffer s = new StringBuffer(); s.append(x * 100 / getWidth() + ",90,0,"); s.append(y * 100 / getHeight()); s.append(LS); return(s.toString()); } }

    • ベストアンサー
    • Java
  • C# 配列?

    C#2005で以下のコードを実行すると 'System.NullReferenceException' のハンドルされていない例外が テスト.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。 となります。配列は定義しているのですが 何がおかしいのでしょうか? Label[] lblTest = new Label[5]; private void Init() { for (int i = 0; i < 5; i++) { lblTest[i].Text = "1"; // ここで、エラー } }

  • 配列に対してsetText()は使えないんでしょうか?

    こんにちは、いつもお世話になっております。 3つのラベルの配列に文字列を表示したいのですが 下記のコードをコンパイルし実行すると、 Exception in thread "main" java.lang.NullPointerException at txtest.main(txtest.java:16) というエラーが出てしまいます。(コンパイルはできる。) 「setText()」を「=new JLabel(right1)」という風に書き変えると 正しく、表示されるのですが、この方法は使いたくないのです。 何かよい方法ご存知でしたら、是非教えていただけますか? どうかよろしくお願いいたします。 import java.awt.*; import javax.swing.*; class txtest { public static void main(String[] args) { JFrame f=new JFrame(); JPanel p=new JPanel(); JLabel label[]=new JLabel[3]; label[0].setText("right1"); label[1].setText("right2"); label[2].setText("right3"); for(int i=0;i<=2;i++) { p.add(l[i]); } Container ct=f.getContentPane(); ct.add(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • ペイントソフトを作っているのですが・・・

    簡単な絵を書くプログラムを下のようにつくりました。 こんなようなソースが公開されているサイトをご存知のかたは教えていただけないでしょうか?? おねがいします!! import java.awt.*; import java.awt.event.*; public class mouse5 extends Frame implements MouseListener , MouseMotionListener{ //グローバル変数 int x0,y0; Color objectColor = Color.red; //コンストラクタ public mouse5(){ setSize(400,300); //マウスイベント addMouseListener(this); addMouseMotionListener(this); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } //paint public void paint(Graphics g){ } //マウスが押されたら public void mousePressed(MouseEvent e){ //始点の座標 x0 = e.getX(); y0 = e.getY(); } //マウスが放されたら public void mouseReleased(MouseEvent e){ } //マウスがクリックされたら public void mouseClicked(MouseEvent e){ } //マウスが画面に入ったら public void mouseEntered(MouseEvent e){ } //マウスが画面から出たら public void mouseExited(MouseEvent e){ } //マウスがドラックされたら public void mouseDragged(MouseEvent e){ //線を引く Graphics g = getGraphics(); g.drawLine(x0,y0,e.getX(),e.getY()); g.dispose(); //次のために始点を更新 x0 = e.getX(); y0 = e.getY(); } //マウスが動いたら public void mouseMoved(MouseEvent e){ } //main public static void main(String[] args) { Frame w = new mouse5(); w.show(); } }

    • ベストアンサー
    • Java
  • オブジェクト生成についての疑問

    ------------------- | Button1 Button2 | ------------------- |   CardLayout   | ------------------- CardLayoutはUP1(UnderPanel)とUP2を重ねて配置。 というレイアウトにした場合、 Button1でカード1(UP1)、Button2でカード2(UP2) を表示させたいのですがその際 public void set1(){ //パネル1へラベル配置 UP1.removeAll(); UP1.add(new JLabel("L1")); } public void setU2(){ //パネル2へラベル配置 UP2.removeAll(); UP2.add(new JLabel("L2")); } public void actionPerformed(ActionEvent e){ if(e.getSource() == B1){ //Button1ならカード1 set1(); CL.show(UP, "u1"); } else if(e.getSource() == B2){ //Button2ならカード2 set2(); CL.show(UP, "u2"); } cp.repaint(); } } ********************** JLabel L1, L2 とはせずにカードが変更される都度JLabelを生成するようにしたいのですが、上記では B1→B2→B1→…と交互に押す分には問題ないのですが、B1→B1と同じボタンを連続して押すと、cp.repaint()でカード内のオブジェクトが消えてしまいます。 なぜこのような現象が起きてしまうのでしょうか?

    • ベストアンサー
    • Java