Java,Swing,Awt - 在图像上绘制矩形并使其可见
我试图打开一个图像,在拖动鼠标的同时绘制一个矩形(鼠标拖动事件),并绘制最后一个矩形鼠标被释放。Java,Swing,Awt - 在图像上绘制矩形并使其可见
我实现拖动时绘制矩形,但我不能在此刻收集最终点的坐标以绘制矩形并存储其数据。你有什么想法来改进我的代码吗? (在背景中添加一个图像,即使在绘制几个图像时也会保留矩形)
我猜mousReleased Event可以帮助我,但我不知道该如何使用它。
编辑:在绘制第一个矩形后,如果绘制第二个矩形,我希望它保持可见。
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);
}
}
}
感谢您的时间伙计。
回答:
我试图打开一个图像,画上有一个长方形
第一矩形上漆后,我想,如果我画的第二个它仍然可见。
保留矩形的ArrayList进行绘制。然后在组件的paintComponent()方法中显示图像,您可以遍历列表来绘制矩形。
查看DrawOnComponet
来自Custom Painting Approaches的示例,以便开始您的工作示例。
该示例只是绘制矩形,因此您还需要绘制图像。或者你可以扩展JLabel,所以标签绘制图像,然后你画出矩形。
以上是 Java,Swing,Awt - 在图像上绘制矩形并使其可见 的全部内容, 来源链接: utcz.com/qa/258861.html