Java 错误的鼠标器开火

Java 错误的鼠标器开火,java,swing,components,jpanel,mouselistener,Java,Swing,Components,Jpanel,Mouselistener,我用Java编写了一个程序,可以在其中绘制椭圆和矩形,然后将它们分组,以便在它们上进行大小调整和移动操作 我将MouseListeners添加到DrawPanel(JPanel)中,作为所有创建的形状(该DrawPanel上的组件)。但当我将几个形状组合在一起后,似乎鼠标侦听器被向后推,链接到大型机的鼠标侦听器被触发 我对JPanel上的calls.GetCompontent()函数做了一个变通。但是肯定有可能推进组件鼠标侦听器 JPanel及其组件都使用相同的MouseListener pub

我用Java编写了一个程序,可以在其中绘制椭圆和矩形,然后将它们分组,以便在它们上进行大小调整和移动操作

我将
MouseListener
s添加到
DrawPanel(JPanel)
中,作为所有创建的形状(该DrawPanel上的组件)。但当我将几个形状组合在一起后,似乎
鼠标侦听器
被向后推,链接到
大型机
鼠标侦听器
被触发

我对
JPanel
上的calls.GetCompontent()函数做了一个变通。但是肯定有可能推进组件
鼠标侦听器

JPanel及其组件都使用相同的
MouseListener

public class MainFrame extends JFrame implements ActionListener,MouseInputListener {        

public MainFrame() {
    super("Tekenprogramma");
    //some other stuf
    drawPanel.addMouseListener(this);
    drawPanel.addMouseMotionListener(this);
}
在同一类中创建和添加形状时:

public void mousePressed(MouseEvent e) {
    if(e.getSource() == drawPanel) {
        Point pos = e.getPoint();
        switch(mode) {
//Some other cases...
        case RECTANGLE:
            shape = new Rectangle(pos);
            shape.addMouseListener(this);
            shape.addMouseMotionListener(this);
            storeAndExecute(new RectangleCommand(drawPanel,shape));

最初,形状确实会对自己的侦听器做出反应。但是,当我移除并读取它们(嵌套在没有
MouseStener
(组)的组件中)后,它们停止触发,
绘图面板
MouseStener
接管了它。

可能重复Swing设计原则,即只有一个组件接收事件。您遇到的是传播优先级问题。