如何用Swing制作画布?
我正在尝试使用Java制作一个绘画编辑器,其中我有一个工具栏,其中包含要粘贴到画布中的对象。我正在使用 Swing 组件来制作 GUI,但是当我寻找制作画布的方法时,我只找到了 AWT 的类画布。
有没有办法用Swing制作类似于画布的东西?(例如,JPanel?我已经读到,使用AWT的类画布和用swing制作的GUI将无法正常工作,这是真的吗?
我正在尝试使用Java制作一个绘画编辑器,其中我有一个工具栏,其中包含要粘贴到画布中的对象。我正在使用 Swing 组件来制作 GUI,但是当我寻找制作画布的方法时,我只找到了 AWT 的类画布。
有没有办法用Swing制作类似于画布的东西?(例如,JPanel?我已经读到,使用AWT的类画布和用swing制作的GUI将无法正常工作,这是真的吗?
您可能希望创建JPanel
的子类,并实现自己的绘制要绘制到面板上的组件的方式。
基本方法可能是将 MouseListener
分配给 的子类,然后实现绘画功能。JPanel
基本思想可能是这样的:
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 ... //
}
上面的例子是不完整的(也没有经过测试 - 它肯定不会编译),但它给出了一个关于如何实现一个类的想法,用户可以在其中单击并绘制圆圈。MyCanvas
该对象用于保存画布的图像。该方法用于将对象绘制到画布上。在该方法中,检索与关联的对象以将其放到图像上。img
paintComponent
img
mouseClicked
Graphics
img
fillOval
由于要求是将图像粘贴到画布上,因此最好保留一些要粘贴到画布中的图像。也许有些东西是这样的:Image
Image[] myImages; // Used to store images to paint to screen.
然后,在例程中将图像绘制到存储中:img
MyCanvas
g.drawImage(myImage[INDEX_OF_DESIRED_IMAGE], 0, 0, null);
通过使用图形
对象的 drawImage
方法,可以将其他 s 绘制到 s 上。Image
Image
至于关于AWT和Swing的问题,是的,您确实不想混合使用AWT和Swing中的组件,因为它们在呈现GUI组件的方式上有所不同。AWT基于重量级组件,这意味着它们具有用于绘制GUI的本机窗口,而Swing基于轻量级组件,这意味着GUI由Java本身绘制,而无需使用本机组件。
关于AWT和Swing差异的良好指南在Sun的Awt和Swing文章中提供了绘画。