24 java user-interface swing java-canvas
我正在尝试使用Java制作一个绘图编辑器,其中我有一个工具栏,其中包含我想要在画布中粘贴的对象.我正在使用Swing组件来制作GUI,但是当我寻找制作画布的方法时,我只从AWT中找到了类画布.
有没有办法用Swing制作类似于画布的东西?(例如,JPanel?)我已经读过,使用AWT的类画布和使用swing制作的GUI将无法正常工作,这是真的吗?
coo*_*ird 16
您可能希望创建一个子类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 ... //
}
Run Code Online (Sandbox Code Playgroud)
上面的例子是不完整的(并且没有经过测试 - 它肯定不会编译),但是它提供了一个关于如何实现MyCanvas一个用户可以点击并绘制圆圈的类的想法.
该img对象用于保存画布的图像.该paintComponent方法用于将img对象绘制到画布.在该mouseClicked方法中,检索Graphics与之关联的对象img以便fillOval在图像上.
由于要求是将图像粘贴到画布上,因此最好将一些Image要粘贴到画布中的图像粘贴到画布上.也许是这样的:
Image[] myImages; // Used to store images to paint to screen.
Run Code Online (Sandbox Code Playgroud)
然后,在例程中将图像绘制到img存储在MyCanvas:
g.drawImage(myImage[INDEX_OF_DESIRED_IMAGE], 0, 0, null);
Run Code Online (Sandbox Code Playgroud)
通过使用对象的drawImage方法,可以将Graphics其他Images绘制到Images上.
关于AWT和Swing的问题,是的,你确实不想混合AWT和Swing中的组件,因为它们在呈现GUI组件方面有所不同.AWT基于重量级组件,这意味着它们是用于绘制GUI的本机窗口,而Swing基于轻量级组件,这意味着GUI本身是由Java自己绘制的,而不使用本机组件.
关于AWT和Swing差异的一个很好的指南在Sun的AWT和Swing文章中提供.
Tom*_*ine 13
只是子类JComponent.
JPanel是一个不合适的课程.它经常被建议,因为它似乎已setOpaque(true)自动调用它.它实际上是PL&F做到这一点,它是否实际发生是依赖于实现和供应商.
Canvas是一个重量级的组件.也就是说它由底层窗口系统控制.结果是它通常会被绘制在Swing组件的顶部,而不考虑z顺序或剪辑(将它放在滚动窗格中会产生奇怪的行为).
| 归档时间: |
|
| 查看次数: |
55899 次 |
| 最近记录: |