JLabelの束があり、マウスクリックイベントをトラップしたいと思います。現時点では私が使用する必要があります:
public void mouseClicked(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
System.out.println("Welcome to Java Programming!");
}
トラップしたくない一連のイベントを作成する代わりに、これを行うための整然とした方法があるかどうか疑問に思っていましたか?
編集:
class MyAdapter extends MouseAdapter {
public void mouseClicked(MouseEvent event) {
System.out.println(event.getComponent());
}
}
上記は機能しますが、netBeansは@overrideアノテーションを追加すると言っています。これは何を意味するのでしょうか?
編集:わかりました。修正して解決しました。
MouseAdapter()
を使用します
マウスイベントを受け取るための抽象アダプタークラス。このクラスのメソッドは空です。このクラスは、リスナーオブジェクトを作成するための便宜として存在します。したがって、次の例のように、必要なメソッドのみを実装する必要があります。
import Java.awt.event.MouseAdapter;
import Java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainClass extends JPanel {
public MainClass() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
System.out.println(me);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new MainClass());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
MouseAdapter
インターフェイスを実装する MouseListener
クラスを使用できるため、すべてのメソッドを実装する必要はありません。
ただし、目的のメソッドをオーバーライドすることにより、目的の動作を得ることができます。たとえば、mouseClicked
メソッドをオーバーライドする場合は、マウスクリックイベントの動作を定義できます。
例(テストされていないコード):
JLabel label = new JLabel("Hello");
label.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("Clicked!");
}
});
上記のコードでは、JLabel
は "Clicked!
"をクリックすると、コンソールに表示されます。
代わりに MouseAdapter を拡張して、本当に関心のあるイベントをオーバーライドできます。
public class MouseEventDemo ... implements MouseListener {
//where initialization occurs:
//Register for mouse events on blankArea and the panel.
blankArea.addMouseListener(this);
addMouseListener(this);
...
public void mousePressed(MouseEvent e) {
saySomething("Mouse pressed; # of clicks: "
+ e.getClickCount(), e);
}
public void mouseReleased(MouseEvent e) {
saySomething("Mouse released; # of clicks: "
+ e.getClickCount(), e);
}
public void mouseEntered(MouseEvent e) {
saySomething("Mouse entered", e);
}
public void mouseExited(MouseEvent e) {
saySomething("Mouse exited", e);
}
public void mouseClicked(MouseEvent e) {
saySomething("Mouse clicked (# of clicks: "
+ e.getClickCount() + ")", e);
}
void saySomething(String eventDescription, MouseEvent e) {
textArea.append(eventDescription + " detected on "
+ e.getComponent().getClass().getName()
+ "." + newline);
}
}
クリックされたマウスイベントの例
mousePressedまたは他のマウスイベントを使用できるのと同じ方法で
import Java.awt.*;
import Java.awt.event.*;
import javax.swing.*;
public class Work1 extends JFrame{
private JPanel panelNew;
public Work1(){
super("Work 1");
// create Panel
panelNew = new JPanel();
panelNew.setLayout(null);
panelNew.setBackground(Color.cyan );
add(panelNew);
// create Button
JButton btn = new JButton("click me");
// position and size of a button
btn.setBounds(100, 50, 150, 30);
panelNew.add(btn);
// add event to button
btn.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
// change text of button after click
if (btn.getText() == "abraCadabra"){
btn.setText("click me again") ;
}
else btn.setText("abraCadabra");
}
});
}
public static void main(String[] args){
Work1 go1 = new Work1();
go1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
go1.setSize(320,200);
go1.setVisible(true);
}
}
Java.awt.event.MouseAdapter
から継承して、関心のあるイベントのメソッドのみをオーバーライドできます。