2016-07-04 6 views
1

私のクラスでは、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

答えて

2

、あなたが実行する必要があります。

SubObj() { 
    firstQ.addMouseListener(listener); 
    secondQ.addFocusListener(listener); 
} 

をまたにsquareLis変数を削除しますあなたのDoSquarecラス。

public class SubObj extends JPanel { 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       SubObj content = new SubObj(); 
       frame.setContentPane(content); 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    SubObj() { 
     MouseAdapter mouseAdapter = new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       System.out.println(e.getSource()); 
       System.out.println("click from " + ((TestPanel) e.getSource()).getId()); 
      } 
     }; 

     JPanel testPanel1 = new TestPanel("1"); 
     testPanel1.setPreferredSize(new Dimension(200, 200)); 
     testPanel1.setBackground(Color.BLACK); 
     testPanel1.addMouseListener(mouseAdapter); 
     add(testPanel1); 

     JPanel testPanel2 = new TestPanel("2"); 
     testPanel2.setPreferredSize(new Dimension(100, 100)); 
     testPanel2.setBackground(Color.RED); 
     testPanel2.addMouseListener(mouseAdapter); 
     add(testPanel2); 
    } 

    private class TestPanel extends JPanel { 
     private String id; 

     TestPanel(String id) { 
      this.id = id;  
     } 

     public String getId() { 
      return id; 
     } 
    } 
} 

UPDATEは、私が上記の書いたコードは、あなたが達成したいものと同等であり、それはあなたが望むように働きました。私はあなたのコードを使用していません。私は正確にあなたがそれを望んでいるか分かりません。私のコードは、クリックすると2つのサブパネルがマウスイベントにどのように反応するかを示すものです。

+0

返信いただきありがとうございます、私はあなたが示唆するようにリスナーを変更しようとしましたが、結果は変更されません。 – AleMal

+0

@almalそれは動作します、私の更新されたコードを試してください。 –

+0

偉大な、それは動作します!再度、感謝します – AleMal

関連する問題