【发布时间】:2016-05-07 22:13:35
【问题描述】:
我正在尝试创建一个绘制图形的简单应用程序...
package Tests.Drawing;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.EtchedBorder;
public class DrawingTest extends JFrame
{
private Canvas drwArea;
private JButton btnClear;
public static void main(String[] args)
{
DrawingTest StartForm = new DrawingTest();
StartForm.setVisible(true);
}
public DrawingTest()
{
//Window...
this.setTitle("Drawing objects test00");
this.setBounds(0,0,510,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
//Drawing area...
drwArea = new Canvas();
drwArea.setBounds(0, 0, 400, 450);
drwArea.setBackground(Color.WHITE);
drwArea.setOpaque(true);
drwArea.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
drwArea.addMouseMotionListener(new MouseMotionAdapter()
{
@Override
public void mouseDragged(MouseEvent e)
{
//Write code to paint on the image...
}
});
this.getContentPane().add(drwArea);
//Clear button...
btnClear = new JButton("Clear");
btnClear.setBounds(410,50,70,30);
btnClear.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//Write code to clear the image...
}
});
this.getContentPane().add(btnClear);
}
private class Canvas extends JLabel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//The idea of overriding this method is
//achieving persistence...
}
}
}
我已经看到要绘制的典型组件是 Jlabel(顺便问一下,有没有更好的组件?)。使用“getGraphics”方法,我可以使用具有多种方法的对象在组件上进行绘制。我的问题是,我不想直接在 JLabel 上绘画,而是想在图像上绘画(在内存中),一旦绘画完成,将结果发送到 JLabel。我怎样才能做到这一点?我有点迷茫……
提前致谢。
【问题讨论】:
-
如果您对我的回答有任何疑问,请追问!
-
I have seen that the typical component to draw on is a Jlabel- 您不会在 JLabel 上“绘制”(也就是说,您不会覆盖 paintComponent() 来进行绘制)。您可以使用 JLabel 来显示 ImageIcon。如果你想在他们身上画画,你通常会在JPanel或BufferedImage上画画。有关这两种方法的工作示例,请参阅 Custom Painting Approaches。