Java 如何在BuffereImage上画一条线?
我正在尝试创建某种绘画程序。我创建了一个BuffereImage和一个Graphics2D,但我不能在上面绘制。我所能看到的只是BuffereImage本身,没有任何更改Java 如何在BuffereImage上画一条线?,java,Java,我正在尝试创建某种绘画程序。我创建了一个BuffereImage和一个Graphics2D,但我不能在上面绘制。我所能看到的只是BuffereImage本身,没有任何更改 public class paintapp implements ActionListener, MouseListener, MouseMotionListener { public static final int WIDTHBUFF=300; public static final int HEIGHTBUFF=300;
public class paintapp implements ActionListener, MouseListener, MouseMotionListener
{
public static final int WIDTHBUFF=300;
public static final int HEIGHTBUFF=300;
BufferedImage buffimage=new BufferedImage(WIDTHBUFF,HEIGHTBUFF,BufferedImage.TYPE_INT_BGR);
JLabel imagelabel=new JLabel(new ImageIcon(buffimage));
int s=3;
Color curr_color=Color.BLACK;
int x,y;
public static final int WIDTH=700;
public static final int HEIGHT=700;
public paintapp()
{
Graphics2D g2d=buffimage.createGraphics();
g2d.setBackground(Color.WHITE);
g2d.fillRect(0, 0, WIDTHBUFF,HEIGHTBUFF);
JFrame frame=new JFrame("Painter");
frame.setSize(WIDTH, HEIGHT);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setVisible(true);
Panel buttonpanel=new Panel();
Panel colors=new Panel();
Panel draw=new Panel();
draw.add(imagelabel);
frame.add(draw);
frame.pack();
}
public static void main(String[]args)
{
paintapp paint1=new paintapp();
}
@Override
public void mouseDragged(MouseEvent e) {
Graphics2D g2=buffimage.createGraphics();
g2.setColor(curr_color);
g2.setStroke(new BasicStroke(s));
g2.drawLine(x, y, e.getX(), e.getY());
x=e.getX();
y=e.getY();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
x=e.getX();
y=e.getY();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}我看到你在翻找东西,把东西弄得乱七八糟。如果你阅读这些指南,你就会看到事情的进展 第一件主要的事情是向绘图对象添加一个MouseMotionListener——不管是JLabel还是JPanel 第二件事是,一旦你跳出构造器,JFrame就会丢失(除非你做了一些奇特的事情),并且无法被访问以进行刷新,因此系统决定何时刷新,在你添加鼠标侦听器之后,你会看到一旦你隐藏并再次显示绘图窗口,你的绘图就会出现
因此,您需要将JFrame作为全局的—为什么不让您的类扩展JFrame,这样就不需要额外的JFrame了。首先,在格式化代码方面投入更多的精力;)