簡體   English   中英

我將如何在JPanel上繪制然后顯示在JFrame上?

[英]How would I draw on a JPanel to then be shown on a JFrame?

我曾嘗試研究Java的2D渲染的工作原理,但我永遠無法理解。 這是我的主類中的代碼:

import java.awt.Dimension;

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

public class Main{

    public static void main(String args[]) {
        JFrame frame = new JFrame();
        frame.setSize(new Dimension(500,500));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("JFrame testing");
        frame.setVisible(true);
        Frame panel = new Frame();
        frame.add(panel);
    }
}

然后是JPanel類:

import java.awt.Graphics;

import javax.swing.JPanel;

public class Frame extends JPanel{
    private static final long serialVersionUID = 1L;

    public Frame() {
        Graphics g = this.getGraphics();
        g.drawRect(0, 0, 100, 100);
        this.paintComponent(g);
    }
}

我也遇到了這個異常,但是我不確定這意味着什么:

Exception in thread "main" java.lang.NullPointerException
    at Frame.<init>(Frame.java:10)
    at Main.main(Main.java:18)

我基本上只是想在面板上繪制一個矩形,以顯示在我創建的框架上。 我聽說過paintComponent方法,但我也不太了解。

永遠不要使用Component的getGraphics()

試試下面的代碼

 public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawRect(0, 0, 100, 100);
        //this.paintComponent(g);
    }

編輯

為什么在方法內部再次調用super.paintComponent(g)?

paintComponent文檔說得很好:

如果您沒有調用super的實現,則必須使用opaque屬性,即,如果該組件是不透明的,則必須使用非不透明的顏色完全填充背景。 如果您不尊重不透明屬性,則可能會看到視覺偽像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM