1

私はいくつかのクラスで構成されるJavaプログラムを持っています。

ここで、 ApplicationというクラスでJavaプログラムのインターフェースを作成しました。そこでいくつかのボタンを定義しました。

これは、 Applicationクラスのボタンにマウスリスナーを追加した方法です。

私はDrawingCanvasと呼ばれる別のクラスを持っています。これには、とりわけ、いくつかのマウスイベントハンドラーが含まれています。これらのイベントハンドラーの1つはmousePressedです。mousePressedのコードは次のとおりです。

mousePressedの問題は、「Button_Square」、「Button_Rectangle」などのボタン名が認識されないことです。これは、これらのボタンが、 DrawingCanvasクラスではなくApplicationクラスで宣言されているためです。

マウスイベントをトリガーしたボタンの名前を取得するにはどうすればよいですか?ボタンが宣言されているクラスは、mouselistenersおよびmousemotionlistenersを実装するクラスと同じではないことを忘れないでください。ありがとう :)

4

3 に答える 3

2

まず、DrawingCanvasを1つ作成して、それをアプリケーションクラスのフィールドにすることができます。ここで私はそれを呼ぶつもりですcanvas。これで、すべてのボタンが異なることを行う場合、すべての異なるMouseListenersをボタンに与えることができます。

Button_Rectangle.addMouseListener(new MouseListener()
{
    public void mousePressed(MouseEvent e)
    {
           if(!e.isControlDown())
           {
                 canvas.Shapes.add(new Rectangle(e.getX(), e.getY()));
           }
    }
    //handle other events, or don't directly implement MouseListener

});

Buuton_Circle.addMouseListener(new MouseListener()
{
    public void mousePressed(MouseEvent e)
    {
           if(!e.isControlDown())
           {
                 canvas.Shapes.add(new Circle(e.getX(), e.getY()));
           }
    }
    //handle other events, or don't directly implement MouseListener

});

すぐ...

さまざまなオブジェクトを使用してソースを特定する必要がなくなります。

于 2012-11-15T16:33:58.343 に答える
1

8つの異なるリスナーを作成する限り、JButtonでそれらを区別します。

Button_Square.addMouseListener(new DrawingCanvas(Button_Square));
Button_Square.addMouseMotionListener(new DrawingCanvas(Button_Square));

Button_Rectangle.addMouseListener(new DrawingCanvas(Button_Rectangle));
Button_Rectangle.addMouseMotionListener(new DrawingCanvas(Button_Rectangle));

Button_Circle.addMouseListener(new DrawingCanvas(Button_Circle));
Button_Circle.addMouseMotionListener(new DrawingCanvas(Button_Circle));

Button_Triangle.addMouseListener(new DrawingCanvas(Button_Triangle));
Button_Triangle.addMouseMotionListener(new DrawingCanvas(Button_Triangle));
于 2012-11-15T16:06:10.487 に答える
0

ボタンで設定したテキストを読むことができます。そのテキストが一意である場合、ボタンを識別します。以下は、JToggleButtonsを識別および制御するために使用しているロジックです。

[抽象]ボタンを取得すると、textプロパティを解析せずに、ボタンを使用して必要な操作(背景色の取得/設定など)を実行できる場合があることに注意してください。

例:

void PrintEventProperties(java.awt.event.MouseEvent evt) {
    AbstractButton EventSource = (AbstractButton)evt.getSource();
    System.out.println("Toggled on? " + EventSource.isSelected() );
    System.out.println("ID/text=" + EventSource.getText() );
    System.out.println("Color=" + EventSource.getBackground() );
}
于 2018-12-19T22:09:39.467 に答える