クリックすると特定のサウンドを再生するアイコンタイルでスイングプログラムを作成したいと思います。このために私はクラスを作成しました:MouseListenerがカスタムJLabelに対してトリガーしない
public class Item extends JLabel implements MouseListener {
public Item(String s) {
// constructor setting background icon and private field with the sound to play
}
public void playSound(); //plays the sound
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Clicked");
this.playSound();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("Pressed");
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
は、それから私は、カスタムJFrame
クラスを作成します。
public class Frame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 9221468315661092752L;
public static final int DEFAULT_FRAME_WIDTH=400;
public static final int DEFAULT_FRAME_HEIGHT=400;
private GridLayout gridLayout;
private ArrayList<Item> tiles=new ArrayList<Item>();
public Frame() {
super("Title");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(new Dimension(DEFAULT_FRAME_WIDTH,DEFAULT_FRAME_HEIGHT));
gridLayout=new GridLayout(4,4,10,10);
setLayout(gridLayout);
addItems();
}
public void addItems() {
Item item=new Item("name");
Item item2=new Item("name");
tiles.add(item);
tiles.add(item2);
this.add(item);
this.add(item2);
}
public static void main(String[] args) {
Frame frame=new Frame();
frame.setVisible(true);
}
タイルがグリッドレイアウトで正常に表示され、しかし問題は、マウスリスナーが動作しないということです。 mouseClicked()
とに入れたprintln()
は呼び出されません。
私はItem
がMouseListener
を持つように、MouseListener
Item
クラスに追加しようとする可能性がありますが、私は上記のコードが間違っているのだろうか。
'私はその項目がのMouseListenerを持っているので、ItemクラスにするMouseListenerを追加しようとすることができますが、私は間違っているのだろうか上記のコードで - それはまさにあなたがクラスを作成するときにインスタンスにMouseListenerを追加しなかった問題です。あなたが指示しない限り、コンポーネントはイベントを聴いていません。 MouseListenerインターフェイスを実装しても、MouseEventsをリッスンするようには通知されません。実際の例については、[MouseListenerの記述方法](http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)のSwingチュートリアルのセクションを参照してください。 – camickr
アイコン付きサンセリフ・ボタン/アクション・リスナーは、ラベル/マウスのコンボをすべて行います。キーボード入力にも対応しています。 –