Java为什么用Graphics画图不起作用?

下面的Graphics有内容,但是为什么就是不能画出图形?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawPanel extends JFrame{
    public static void main(String[] args) {
        new DrawPanel();
    }

    public DrawPanel() {
        setTitle("我的第一个窗口");
        setSize(600,600);
        setResizable(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        createDP();
    }
    
    private JPanel panel;
    private Point prevPoint;
    private Color color;
    private int Thickness=10;
    private void createDP(){
        JPanel tools=new JPanel();
        Container cont=getContentPane();
        cont.setLayout(null);
        panel=new JPanel();
        panel.setBackground(Color.BLUE);
        panel.setBounds(10, 100, 400, 400);
        //第一种
        final Graphics2D g=(Graphics2D)createImage(300,300).getGraphics();
        //第二种
//        BufferedImage buffImg=new BufferedImage(300,300,BufferedImage.TYPE_INT_ARGB);
//        final Graphics2D g=(Graphics2D)buffImg.createGraphics();
        panel.addMouseListener(new MouseAdapter() {
            
            @Override
            public void mousePressed(MouseEvent e) {
                prevPoint=e.getPoint();
                g.setColor(Color.RED);
                g.fillOval(prevPoint.x, prevPoint.y, Thickness, Thickness);
                
            }
        });
        panel.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e){
                
            }
        });
        
        cont.add(tools,BorderLayout.NORTH);
        cont.add(panel);
    }
}
阅读 4.8k
2 个回答

你确认你这段代码能编译过? main里的new DrawPanel()显然有错误。。DrawPanel是function,不是class。

既然你需要在 panel 上绘图,那么每次绘图就应该获得 panel 的画笔才对:

panel.addMouseListener(new MouseAdapter() {

    @Override
    public void mousePressed(MouseEvent e) {
        prevPoint = e.getPoint();

        // 获得 panel 的画笔,返回的是一个 Graphics2D 实例
        Graphics g = panel.getGraphics(); 
        
        g.setColor(Color.RED); 
        g.fillOval(prevPoint.x, prevPoint.y, Thickness, Thickness);
    }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题