代码之家  ›  专栏  ›  技术社区  ›  Bernard

我的(Java/Swing)MouSististar没有听,帮我找出原因

  •  6
  • Bernard  · 技术社区  · 16 年前

    所以我有一个 JPanel 实施 MouseListener MouseMotionListener :

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class DisplayArea extends JPanel implements MouseListener, MouseMotionListener  {
        public DisplayArea(Rectangle bounds, Display display) {
            setLayout(null);
            setBounds(bounds);
            setOpaque(false);
            setPreferredSize(new Dimension(bounds.width, bounds.height));
    
            this.display = display;
        }
    
        public void paintComponent(Graphics g) {
             Graphics2D g2 = (Graphics2D)g;
             if (display.getControlPanel().Antialiasing()) {
                 g2.addRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
             }
             g2.setColor(Color.white);
             g2.fillRect(0, 0, getWidth(), getHeight());
        }
    
        public void mousePressed(MouseEvent event) {
            System.out.println("mousePressed()");
            mx1 = event.getX();
            my1 = event.getY();
        }
    
        public void mouseReleased(MouseEvent event) {
            System.out.println("mouseReleased()");
            mx2 = event.getX();
            my2 = event.getY();
    
            int mode = display.getControlPanel().Mode();
            switch (mode) {
            case ControlPanel.LINE:
                 System.out.println("Line from " + mx1 + ", " + my1 + " to " + mx2 + ", " + my2 + ".");
            }
        }
    
        public void mouseEntered(MouseEvent event) {
            System.out.println("mouseEntered()");
        }
    
        public void mouseExited(MouseEvent event) {
            System.out.println("mouseExited()");
        }
    
        public void mouseClicked(MouseEvent event) {
            System.out.println("mouseClicked()");
        }
    
        public void mouseMoved(MouseEvent event) {
            System.out.println("mouseMoved()");
        }
    
        public void mouseDragged(MouseEvent event) {
             System.out.println("mouseDragged()");
        }
    
        private Display display = null;
    
        private int mx1 = -1;
        private int my1 = -1;
        private int mx2 = -1;
        private int my2 = -1;
    }
    

    问题是,这些鼠标函数从来没有被调用过。 DisplayArea 创建方式如下:

    da = new DisplayArea(new Rectangle(CONTROL_WIDTH, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT), this);
    

    我不是真正的Java程序员(这是任务的一部分),但我看不出任何明显的东西。比我聪明的人能看到什么吗?

    3 回复  |  直到 9 年前
        1
  •  13
  •   Shabaz    16 年前

    这个 实现mouseListener、mouseEmotionListener 只允许DisplayArea类监听一些要定义的Swing组件的鼠标事件。你必须明确地定义它应该在听什么。所以我想您可以向构造函数中添加类似这样的内容:

    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    
        2
  •  3
  •   Neal    16 年前

    在代码中,我看不到您为显示区调用addmouselistener(this)或addmousemotionlistener(this)以便它订阅这些事件的任何地方。

        3
  •  3
  •   Paul Tomblin    16 年前

    我在这里没有看到任何注册到鼠标侦听器的代码。你必须在显示区打电话给addmouselistener(这个)和addmousemotionlistener(这个)。