我在試圖從一個點向負方向繪製一個矩形問題點擊屏幕上。我有以下類模擬屏幕捕捉軟件,如Gyazo:前面已經提到問題負方向繪製矩形 - Java的
class DrawSquare extends JPanel implements MouseListener, MouseMotionListener {
// Components
public JDialog frame;
public Rectangle rectangle;
public BufferedImage bufferedImage;
public Point start, end;
// Variables
public String capturedImage;
public DrawSquare(JDialog frame) {
this.frame = frame;
// Read in crosshair image to replace mouse icon
Toolkit tool = Toolkit.getDefaultToolkit();
Image newImage = getToolkit().getImage("components/cursor.png");
Cursor cursor = tool.createCustomCursor(newImage, new Point (this.frame.getX(), this.frame.getY()), "img");
this.frame.setCursor(cursor);
this.frame.addMouseListener(this);
this.frame.addMouseMotionListener(this);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
// draw background overlay
g2d.drawImage(bufferedImage, WIDTH, 0, this);
if (rectangle != null) {
//g2d.setColor(new Color(225, 225, 255, 128));
frame.setOpacity(0.6f);
//g2d.fill(rectangle);
System.out.println(rectangle);
g2d.setColor(new Color(72,119,205));
g2d.draw(rectangle);
}
g2d.dispose();
}
@Override
public void mouseDragged(MouseEvent e) {
this.end = e.getPoint();
int width = end.x - start.x;
int height = end.y - start.y;
rectangle.setSize(new Dimension(width, height));
frame.validate();
frame.repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
this.start = e.getPoint();
frame.validate();
frame.repaint();
}
@Override
public void mousePressed(MouseEvent e) {
// Get the X and Y point from the mouse pressed
rectangle = new Rectangle(start);
System.out.println(rectangle);
// Repaint the screen
frame.validate();
frame.repaint();
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
現在對於這個問題的原因是,當我試圖繪製矩形框的反對或點擊屏幕上的點的負方向,它不會畫,矩形信息看起來像這樣這樣的嘗試中:
java.awt.Rectangle[x=635,y=395,width=-316,height=-194]
然而,當我拖動rectnagle在正DIR撓度它的工作原理,因爲它應該是:
我想知道的是我怎麼能這樣使用負值的寬度/高度,或完全在做另一種方式解決。
感謝您的回覆,我提到了兩點,起點和終點。添加上面概述的解決方案會產生相同的結果。你可能更具體一些嗎?乾杯 – Zy0n