2011-01-19 21 views
1

JLabelの内部にクリック可能なアイコン(ImageIconオブジェクト)が必要です。どのようにして、そのIconにMouseListenerまたはActionListenerを追加することができますか?アイコンがクリックされたかどうかを知る他の方法はありますか?私はJLabelのアイコンを設定するためにsetIcon()メソッドを使用します。JLabelに埋め込まれたImageIconにマウスリスナーを追加するには?

ありがとうございました。

+1

「アイコン」を含む「JButton」はなぜですか? – trashgod

+0

関連:http://stackoverflow.com/questions/1281612/adding-a-child-component-to-a-jbutton – finnw

+0

'JButton'のアイコンは実際にマウスイベントに応答しますが、' JLabel'のdoesn 't。 –

答えて

2

コンテナ内に2つの別々のJLabelを持つことができます。最初のものはテキスト、もう1つはアイコンだけで、マウスリスナーをアイコンJLabelに追加できます。

+1

私は、マウスイベントのXとY位置を使用して、それがIconの境界内にあるかどうかを調べる巧妙な方法があると期待していましたが、JLabel内のIconの位置を表すRectangleはLabelUIしたがって、LabelUIをサブクラス化しても、そのラベルにアクセスすることはできません。しかし、SwingUtilities.layoutCompoundLabel()を呼び出すと、IconのRectangleが1つのパラメータになります。必要な場合はSwingUtilitiesをサブクラス化してその情報を傍受し、どこかに格納することができます。しかし、本当に、私は気にしません。 2つのコンポーネントを使用してください。 –

-4

あなたはあなたの問題を解決するには、このコードを使用することができます:

public class Test extends JFrame { 
    private JLabel label; 
    ImageIcon icon = new ImageIcon("example.gif"); 
    public Test(){ 
     label = new JLabel(icon); 
     label.addMouseListener(new MouseListener() { 

     public void mouseClicked(MouseEvent e) { 
     //for example  
      JOptionPane.showMessageDialog(null, "Hello"); 

     } 

     public void mousePressed(MouseEvent e) { 
     } 

     public void mouseReleased(MouseEvent e) { 
     } 

     public void mouseEntered(MouseEvent e) { 
     } 

     public void mouseExited(MouseEvent e) { 
     } 
    }); 
} 

}

+2

これは彼の問題を抱えた元のポスターには役立ちません。彼はMouseListenerを作成して使用する方法を知っていますが、JLabelのイメージ部分だけを聞きたいと思っています。 –

1

をこの方法は非常にハックですが、私のために働きました。

JLabel.addMouseListener(new MouseAdapter(){ 
     public void mousePressed(MouseEvent me){ 
      try { 
       Robot robot = new Robot(); 
       if(JLabel.getBounds().contains(me.getPoint()) && !robot.getPixelColor(me.getXOnScreen(),me.getYOnScreen()).equals(page.getBackground())){ 
        //Do action here 
       } 
      } catch (AWTException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
関連する問題