鍍金池/ 問答/Java  C  UI  網(wǎng)絡(luò)安全/ Java為什么用Graphics畫圖不起作用?

Java為什么用Graphics畫圖不起作用?

下面的Graphics有內(nèi)容,但是為什么就是不能畫出圖形?

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);
    }
}
回答
編輯回答
念初

你確認(rèn)你這段代碼能編譯過? main里的new DrawPanel()顯然有錯誤。。DrawPanel是function,不是class。

2018年8月7日 07:33
編輯回答
厭惡我

既然你需要在 panel 上繪圖,那么每次繪圖就應(yīng)該獲得 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);
    }
});
2017年10月28日 01:37