マウスをドラッグしている間に画像を開き、マウスのドラッグした状態で矩形を描画し、マウスがリリースされます。Java、Swing、Awt - 画像上に矩形を描画して可視にします。
私はドラッグ中に矩形を描画することに成功しましたが、矩形を描画してデータを保存するために、最終点の座標を収集することができません。コードを改善するためのアイデアはありますか?
私はmousReleasedイベントが助けになると思いますが、私はどのように使用すべきか分かりません。
編集:最初の矩形をペイントした後、2番目の矩形を描画すると、そのペイントが表示されたままになります。
package selectZone;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Rec extends JFrame {
public Rec() {
super("rectangle");
setPreferredSize(new java.awt.Dimension(400, 400));
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pane = new Pan();
add(pane);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Rec();
}
}
class Pan extends JPanel {
private Point origin;
private Point end;
private Point endFinal;
public Pan() {
MouseAdapter adapter = new Lis();
addMouseMotionListener(adapter);
addMouseListener(adapter);
}
class Lis extends MouseAdapter {
public void mouseDragged(MouseEvent e) {
end = e.getPoint();
repaint();
}
public void mousePressed(MouseEvent e) {
origin = e.getPoint();
}
public void mouseReleased(MouseEvent e, Graphics g) {
endFinal = e.getPoint();
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
int x1 = (int) (origin.getX());
int y1 = (int) (origin.getY());
int x2 = (int) (endFinal.getX());
int y2 = (int) (endFinal.getY());
g.drawRect(x1, y1, x2 - x1, y2 - y1);
}
}
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
if (origin != null) {
int tmp;
int x1 = (int) (origin.getX());
int y1 = (int) (origin.getY());
int x2 = (int) (end.getX());
int y2 = (int) (end.getY());
if (x1 > x2) {
tmp = x1;
x1 = x2;
x2 = tmp;
}
if (y1 > y2) {
tmp = y1;
y1 = y2;
y2 = tmp;
}
g.drawRect(x1, y1, x2 - x1, y2 - y1);
}
}
}
ありがとうございました。
カスタムペイントを実行する前に、 'paint'をオーバーライドしないで' paintComponent'を使用し、 'super.paintComponent'を呼び出していることを確認してください。問題が少ないことがわかります – MadProgrammer
私は分かりません'mouseRelease'イベントの目的です。 'origin'と' end'はすでに 'repaint'を呼び出すと矩形が塗られるように設定されています – MadProgrammer