Có thể bạn sẽ muốn tạo một lớp con của JPanel
và triển khai cách vẽ thành phần của riêng bạn mà bạn muốn vẽ lên bảng điều khiển.
Cách tiếp cận cơ bản có thể nằm dọc theo đường phân công MouseListener
cho lớp con của JPanel
, sau đó triển khai chức năng vẽ.
Ý tưởng cơ bản có thể là cái gì đó dọc theo dòng:
class MyCanvas extends JPanel implements MouseListener
{
Image img; // Contains the image to draw on MyCanvas
public MyCanvas()
{
// Initialize img here.
this.addMouseListener(this);
}
public void paintComponent(Graphics g)
{
// Draws the image to the canvas
g.drawImage(img, 0, 0, null);
}
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
Graphics g = img.getGraphics();
g.fillOval(x, y, 3, 3);
g.dispose();
}
// ... other MouseListener methods ... //
}
Ví dụ trên là không đầy đủ (và không được kiểm tra - nó chắc chắn sẽ không biên dịch), nhưng nó mang lại một ý tưởng về cách triển khai một lớp học MyCanvas
trong đó người dùng có thể nhấp vào và vẽ vòng kết nối.
Đối tượng img
được sử dụng để giữ hình ảnh của canvas. Phương pháp paintComponent
được sử dụng để vẽ đối tượng img
vào canvas. Trong phương thức mouseClicked
, đối tượng Graphics
được liên kết với img
được truy xuất để fillOval
vào hình ảnh.
Vì một trong những yêu cầu là dán hình ảnh lên canvas, bạn nên giữ một số ảnh Image
mà bạn muốn dán vào canvas. Có lẽ một cái gì đó dọc theo dòng:
Image[] myImages; // Used to store images to paint to screen.
Sau đó, trong các thói quen để vẽ hình ảnh vào img
lưu trữ trong MyCanvas
:
g.drawImage(myImage[INDEX_OF_DESIRED_IMAGE], 0, 0, null);
Bằng việc sử dụng phương pháp drawImage
của đối tượng Graphics
, Image
s khác có thể được vẽ lên Image
s.
Đối với câu hỏi trên AWT và Swing, có, bạn không muốn trộn các thành phần từ AWT và Swing, vì chúng khác nhau theo cách chúng hiển thị thành phần GUI. AWT dựa trên các thành phần nặng, có nghĩa là chúng là cửa sổ gốc để vẽ GUI, trong khi Swing dựa trên các thành phần nhẹ, có nghĩa là GUI được vẽ bởi chính Java mà không cần sử dụng các thành phần gốc.
Hướng dẫn tốt về sự khác biệt của AWT và Swing được cung cấp trong Painting in AWT and Swing bài viết từ Sun.
URL đã thay đổi kể từ năm 2009. Tìm thấy vị trí thực tế của bài viết tại http://www.oracle.com/technetwork/java/painting-140037.html – Javier