# 使用矩形2D绘制具有不同方向的不同尺寸矩形Draw varying size rectangle with different orientation using rectangle 2D

## 2 个回复2

### ===============>>#1 票数：5 已采纳

``````           Quadrants
+--------------+---------------+
|              |               |
|              |               |
|      I       |       II      |
|              |               |
|              |               |
+--------------O---------------+
|              |               |
|              |               |
|     IV       |      III      |
|              |               |
|              |               |
+--------------+---------------+
``````

• 然后，第2点将成为绘制的起始点。 所以你必须使用切换绘图点

` `// original setRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y); // change to setRect(p2.x, p2.y, p1.x - p2.x, p1.y - p2.y);` `

您可以使用逻辑来检查所在的象限点，例如

` `public boolean isPointTwoInQuadOne(Point p1, Point p2) { return p1.x >= p2.x && p1.y >= p2.y; }` `

``````import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class RectangleDrawWithDrag extends JPanel{
private static final int D_W = 500;
private static final int D_H = 500;

private Point p1;
private Point p2;
private Rectangle2D rectangle;

public RectangleDrawWithDrag() {
public void mousePressed(MouseEvent e) {
p1 = e.getPoint();
rectangle = new Rectangle2D.Double(p1.x, p1.y, p1.x - p1.x, p1.y - p1.y);
}
});
public void mouseDragged(MouseEvent e) {
p2 = e.getPoint();
rectangle.setRect(p2.x, p2.y, p1.x - p2.x, p1.y - p2.y);
} else {
rectangle.setRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);
}

repaint();
}
});
}

public boolean isPointTwoInQuadOne(Point p1, Point p2) {
return p1.x >= p2.x && p1.y >= p2.y;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
if (rectangle != null) {
g2.fill(rectangle);
}
}

@Override
public Dimension getPreferredSize() {
return new Dimension(D_W, D_H);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
``````

### ===============>>#2 票数：2

1. 来自对象的ArrayList
2. 在BufferedImage上

## 未解决问题？本站智能推荐：

1回复

3回复

3回复

3回复

4回复

1回复

4回复

1回复

### Java Graphics 2D中的背景颜色始终为黑色

*我正在尝试打印某些东西，但背景为粉红色，文本为白色。 但是文本颜色确实会改变，但屏幕始终为黑色。 * 现在主要方法： 结果： 我一直在互联网上搜索，但最终一无所获。 如果任何人都可以解决此问题，请先谢谢。
2回复

2回复