Java 如何在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;

我正在尝试创建某种绘画程序。我创建了一个BuffereImage和一个Graphics2D,但我不能在上面绘制。我所能看到的只是BuffereImage本身,没有任何更改

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了。

首先,在格式化代码方面投入更多的精力;)