出于某种原因,鼠标事件在java中不起作用

时间:2015-12-29 15:45:09

标签: java swing

鼠标事件似乎不起作用,我无法找到,为什么。
我在imgEdit.drawDot添加了一个调试输出,并且控制台没有输出。我是java的新手,所以我的代码可能看起来非常糟糕,以及我的英文

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

/**
 * Created by doctor on 12/29/15.
 */

public class MainUI {
    Window mainWindow;
    MainUI() {
        mainWindow = new Window();
    }
}
class Window extends JFrame {
    Window() {
        setBounds(0, 0, 600, 400);
        setTitle("RebBrush");
        Panel mainPanel = new Panel();
        Container mainCont = getContentPane();
        mainCont.setLayout(null);
        mainCont.add(mainPanel);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}
class Panel extends JPanel {
    private ImageEdit imgEdit;
    private JLabel imgLabel;
    Panel() {
        setLayout(null);
        imgEdit = new ImageEdit(600, 400);
        imgLabel = new JLabel(new ImageIcon(imgEdit.getImage()));
        imgLabel.setBounds(0, 0, 600, 400);
        add(imgLabel);
        addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseDragged(MouseEvent e) {
                imgEdit.drawDot(e.getX(), e.getY());
            }

            @Override
            public void mouseMoved(MouseEvent e) {

            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

简单地摆脱空布局对我来说是个窍门。我不确定ImageEdit是什么(你已定义的其他课程?),但是通过运行以下内容,我看到"鼠标拖动"显示在控制台中,因此肯定会调用mouseDragged方法。只需取消注释imageEdit的内容即可将其重新放入。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

/**
 * Created by doctor on 12/29/15.
 */

public class MainUI {
  Window mainWindow;
  MainUI() {
    mainWindow = new Window();
  }
  public static void main(String[] args) {
    new MainUI();
  }
}


class Window extends JFrame {
  Window() {
    setBounds(0, 0, 600, 400);
    setTitle("RebBrush");
    Panel mainPanel = new Panel();
    Container mainCont = getContentPane();
    mainCont.add(mainPanel);
    setVisible(true);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  }
}
class Panel extends JPanel {
  //private ImageEdit imgEdit;
  private JLabel imgLabel;
  Panel() {
    //imgEdit = new ImageEdit(600, 400);
    //imgLabel = new JLabel(new ImageIcon(imgEdit.getImage()));
    //imgLabel.setBounds(0, 0, 600, 400);
    //add(imgLabel);
    addMouseMotionListener(new MouseMotionListener() {
      @Override
      public void mouseDragged(MouseEvent e) {
        System.out.println("Mouse Dragged");
        //imgEdit.drawDot(e.getX(), e.getY());
      }

      @Override
      public void mouseMoved(MouseEvent e) {

      }
    });
  }
}