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

发布于 2022-09-07 11:57:19 字数 2043 浏览 35 评论 0

下面的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);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江心雾 2022-09-14 11:57:19

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

面犯桃花 2022-09-14 11:57:19

既然你需要在 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);
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文