私のクラスでは、JPanelメインオブジェクトに追加したいJPanel objはサブクラス内に作成され、マウスイベントはマウスオブジェクトobjが生成していることを知っています。 これを行うには、サブクラスのDoSquare(JPanel拡張)を作成し、リスナーを追加し、objsを作成し、そのサブクラスのGraphicsを描画しますが、プログラムを実行してDoSquare objを作成するとe.getSource() SubObjオブジェクトをクリックしてください。 Listenerイベントで選択されたコンポーネントを正確に区別するにはどうすればよいですか?サブクラスからのJavaトラップイベントobj
ここに私のコード:あなたのSubObj
クラスのコンストラクタで
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SubObj extends JPanel {
Listener listener = new Listener();
DoSquare firstQ = new DoSquare(100, 50);
DoSquare secondQ = new DoSquare(200, 70);
public static void main(String[] args) {
JFrame panel = new JFrame();
SubObj content = new SubObj();
panel.setContentPane(content);
panel.setFocusable(true);
panel.setSize(400, 400);
panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setVisible(true);
}
SubObj() {
addMouseListener(listener);
addFocusListener(listener);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
firstQ.draw(g, Color.BLACK);
secondQ.draw(g, Color.CYAN);
}
private class DoSquare extends JPanel {
private int coordX;
private int coordY;
Listener squareLis = new Listener();
DoSquare(int X, int Y) {
addMouseListener(squareLis);
addFocusListener(squareLis);
coordX = X;
coordY = Y;
}
void draw(Graphics g, Color c) { // Draw the square
g.setColor(c);
g.fillRect(coordX, coordY, 50, 50);
}
}
public class Listener implements MouseListener, FocusListener {
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
System.out.println(e.getSource());
}
public void mouseReleased(MouseEvent e) {}
public void focusGained(FocusEvent e) {}
public void focusLost(FocusEvent e) {}
}
}
事前に感謝
AM
返信いただきありがとうございます、私はあなたが示唆するようにリスナーを変更しようとしましたが、結果は変更されません。 – AleMal
@almalそれは動作します、私の更新されたコードを試してください。 –
偉大な、それは動作します!再度、感謝します – AleMal