Tôi muốn tăng chiều rộng Line2D. Tôi không thể tìm thấy bất kỳ phương pháp nào để làm điều đó. Tôi có cần thực sự tạo một hình chữ nhật nhỏ cho mục đích này không?
Câu trả lời:
Bạn nên sử dụng setStroke
để thiết lập một nét củaGraphics2D
đối tượng.
Ví dụ tại http://www.java2s.com cung cấp cho bạn một số ví dụ về mã.
Đoạn mã sau tạo ra hình ảnh bên dưới:
import java.awt.*;
import java.awt.geom.Line2D;
import javax.swing.*;
public class FrameTest {
public static void main(String[] args) {
JFrame jf = new JFrame("Demo");
Container cp = jf.getContentPane();
cp.add(new JComponent() {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10));
g2.draw(new Line2D.Float(30, 20, 80, 90));
}
});
jf.setSize(300, 200);
jf.setVisible(true);
}
}
(Lưu ý rằng setStroke
phương thức không có sẵn trong Graphics
đối tượng. Bạn phải truyền nó tới một Graphics2D
đối tượng.)
Bài đăng này đã được viết lại thành một bài báo ở đây .
Là gì Stroke
:
Lớp BasicStroke định nghĩa một tập hợp các thuộc tính kết xuất cơ bản cho các đường viền của các nguyên thủy đồ hoạ, được kết xuất với một đối tượng Graphics2D có thuộc tính Stroke của nó được đặt thành BasicStroke này.
https://docs.oracle.com/javase/7/docs/api/java/awt/BasicStroke.html
Lưu ý rằng Stroke
cài đặt:
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10));
đang đặt chiều rộng dòng, vì BasicStroke(float width)
:
Tạo một BasicStroke vững chắc với chiều rộng dòng được chỉ định và với các giá trị mặc định cho kiểu cap và nối.
Và, nó cũng ảnh hưởng đến các phương pháp khác như Graphics2D.drawLine(int x1, int y1, int x2, int y2)
và Graphics2D.drawRect(int x, int y, int width, int height)
:
Các phương thức của giao diện Graphics2D sử dụng Hình dạng phác thảo được trả về bởi một đối tượng Stroke bao gồm draw và bất kỳ phương thức nào khác được triển khai theo phương thức đó, chẳng hạn như drawLine, drawRect, drawRoundRect, drawOval, drawArc, drawPolyline và drawPolygon.
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)