【问题标题】:paintComponent method not being called in Java没有在Java中调用paintComponent方法
【发布时间】:2013-01-28 00:31:01
【问题描述】:

我正在做这个非常基本和简单的 Swing 教程,作为我软件工程课程的第一个作业,由于一些非常奇怪的原因,我的 JPanel 中没有调用paintComponent 方法。现在我过去曾使用过 Java Swing,但从未遇到过这样的问题。

我正在使用的教程可以在 Oracle 站点上找到(访问该站点并查看代码更容易,因为它与我的代码相同)。

Tutorial Link

谁能解释一下为什么它不适合我?

我的代码:

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 PaintDemo {

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createGUI();
        }
    });
}

private static void createGUI() {
    System.out.println("Created GUI on EDT? "+
            SwingUtilities.isEventDispatchThread());
    JFrame frame = new JFrame("Yay, first 2102 lab!!");
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);        // allows to close the program
    DemoPanel panel = new DemoPanel();
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
}
}

class DemoPanel extends JPanel {

public DemoPanel() {
    setBorder(BorderFactory.createLineBorder(Color.BLACK));
}

public Dimension getPreferredSize() {
    return new Dimension(250,200);
}

public void paintComponenet(Graphics g) {
    super.paintComponent(g);
    g.drawString("This is my custom panel!",10,20);
}
}

【问题讨论】:

  • 请贴出你的代码,可能你有错别字
  • 为什么编译错了代码?
  • @Stephen:我同意,除非他使用 @Override 注释(我建议他这样做),否则它应该可以正常编译。
  • 1+ 用于发布代码。
  • @StephenC:是的,Dan 的错字推荐确实是正确的。

标签: java swing


【解决方案1】:

paintComponent(Graphics g),不是paintComponenet(Graphics g)

至少你正确地调用了super.paintComponent(g)

如果您使用@Override 注释来注释您的paint* 方法,您将收到一个编译错误,这将帮助您了解正在发生的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2013-12-13
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多