[英]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.