[英]JPanel drawing - why do I have to override paintComponent method?
我正在學習Java,我已經開始玩繪畫的可能性了。
基本上我有兩個問題:
paintCompoment
方法才能在JPanel
上繪制一些東西? f.add(new MyPanel());
時的第一個例子f.add(new MyPanel());
它創建一個新的MyPanel
對象並繪制文本。 為什么要繪制文字? 方法paintComponent(g)
未被調用。 對我來說,看起來我有兩個選擇:
第一個(來自http://docs.oracle.com/javase/tutorial/uiswing/painting/step2.html ):
package painting;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class SwingPaintDemo2 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
System.out.println("Created GUI on EDT? "+
SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Swing Paint Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
}
class MyPanel extends JPanel {
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw Text
g.drawString("This is my custom Panel!",10,20);
}
}
第二個:也適用
Graphics g = panel.getGraphics();
g.setColor(new Color(255, 0, 0));
g.drawString("Hello", 200, 200);
g.draw3DRect(10, 20, 50, 15, true);
panel.paintComponents(g);
你不應該自己調用paintComponent()
。
paintComponent()
被自動調用(由UI線程)。
如果將paintComponent()
方法留空,則會調用它,但不會繪制任何內容,因為它是空的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.