gpt4 book ai didi

java - JPanel 绘图 - 为什么我必须重写 paintComponent 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:45 25 4
gpt4 key购买 nike

我正在学习 Java,并且已经开始尝试绘画的可能性。

基本上我有两个问题:

  1. 为什么我必须覆盖 paintCompoment 方法才能在 JPanel 上绘制内容?
  2. 考虑到第一个示例,当我调用 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() 方法留空,它将被调用但不会绘制任何内容,因为它是空的。

关于java - JPanel 绘图 - 为什么我必须重写 paintComponent 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com