クラス javax.swing.JLabel を拡張するクラス JLabelExtended があります。マウスを使ってドラッグするプロパティを追加したいので、拡張します。これが私のコードです:
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 を拡張する別の方法を次に示します。
public class LabelEasy extends 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);
}
}
ただし、以前のバリアントと同様に機能します。