当我左键单击,按住并将光标移动到它们上时,我有一个网格,其中框变为红色(我基本上想要绘制网格)(即:拖动鼠标)。我有下面的代码。当我拖动鼠标时。 MouseDragged方法被正确调用,但只有一个框变为红色,并且在我之后拖动时没有任何反应(尽管仍然调用该方法)。有任何想法吗 ?希望我很清楚。感谢
public static class DragListener implements MouseMotionListener
{
@Override
public void mouseDragged(MouseEvent me) {
JPanel current =(JPanel)me.getSource();
current.setBackground(Color.RED);
}
}
这是网格的定义:
public static class GridPane extends JPanel {
public GridPane(int row, int col) {
int count = 0 ;
setLayout(new GridLayout(row, col));
setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
for (int i = 1; i <= (row * col); i++) {
JPanel lab = new JPanel();
lab.setEnabled(true);
lab.setBackground(Color.WHITE);
lab.setPreferredSize(new Dimension(3, 3));
lab.setBorder(BorderFactory.createLineBorder(Color.BLACK));
lab.addMouseMotionListener(new DragListener());
lab.addMouseListener(new ClickListener());
lab.setName(count+"");
++count;
add(lab);
}
}
}
答案 0 :(得分:0)
你需要这样的东西
public MouseMotionEventDemo() {
addMouseMotionListener(this);
setVisible(true);
}
public void mouseMoved(MouseEvent me) {
mX = (int) me.getPoint().getX();
mY = (int) me.getPoint().getY();
repaint();
}
public void mouseDragged(MouseEvent me) {
mouseMoved(me);
}
答案 1 :(得分:0)
我认为你的问题源于你将鼠标拖到多个JPanels上,以及java识别拖动的方式。 Java通过以下算法识别拖动:
在单个组件“c”中:
因为您的鼠标最终会离开一个组件并在按下时输入第二个组件,所以第二个组件永远不会注册mousePressed操作,因此它不会认为您正在拖动鼠标。我建议在任何“实验室”JPanels(mousePressed())中按下鼠标时保持一些告诉GridPane的标志,然后实现mouseMoved()方法以检查标志和颜色(如果已设置)。然后实现mouseReleased()将标志重置回正常状态,这样在停止拖动后就不会继续着色。
有关Java中鼠标移动的更多信息,请查看以下链接: http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html