我有 JLabelExtended 类,它扩展了 javax.swing.JLabel 类。我扩展它,因为我想使用鼠标添加属性拖动。这是我的代码:
public class JLabelExtended extends JLabel {
private MouseMotionAdapter mouseMotionAdapter;
private JLabelExtended jLabelExtended;
public LabelEasy(String text) {
super(text);
jLabelExtended = this;
mouseMotionAdapter = new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
System.out.println(e.getX() + " : " + e.getY());
jLabelExtended.setLocation(e.getX(), e.getY()
);
}
};
jLabelExtended.addMouseMotionListener(mouseMotionAdapter);
}
}
这是标签拖动后的控制台部分:
163 : 163
144 : -87
163 : 162
144 : -88
163 : 161
144 : -89
我有几个问题:
为什么 e.getY() 会产生负面结果?
当我拖动我的标签时,会出现在我的标签附近拖动的标签副本。我该如何解决?
当我拖动我的标签时,它拖得很慢。例如:当我将光标移动到 10 点时,我的标签只移动到 5 点。我该如何解决?
提前致谢
这是扩展 JLabel 的另一种方法:
公共类 LabelEasy 扩展 JLabel { private MouseAdapter moveMouseAdapter; 私有 MouseMotionAdapter mouseMotionAdapter;
private LabelEasy jLabelExtended;
private int xAdjustment, yAdjustment;
Boolean count = false;
public LabelEasy(String text) {
super(text);
jLabelExtended = this;
moveMouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1) {
xAdjustment = e.getX();
yAdjustment = e.getY();
}
}
};
mouseMotionAdapter = new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (count) {
System.out.println(e.getX() + " : " + e.getY());
jLabelExtended.setLocation(xAdjustment + e.getX(), yAdjustment + e.getY());
count = false;
} else {
count = true;
}
;
}
};
jLabelExtended.addMouseMotionListener(mouseMotionAdapter);
jLabelExtended.addMouseListener(moveMouseAdapter);
}
}
但它像以前的变体一样工作。