3

ソフトウェア エンジニアリング コースの最初の課題として、この非常に基本的で単純な Swing チュートリアルを行っていますが、非常に奇妙な理由で、私の JPanel で paintComponent メソッドが呼び出されません。私は過去に Java Swing を使用してきましたが、このような問題は一度もありませんでした。

私が使用しているチュートリアルは、Oracle サイトにあります (サイトにアクセスしてコードを確認するのは、私が持っているコードと同じなので簡単です)。

チュートリアル リンク

なぜそれがうまくいかないのか、誰か説明してもらえますか?

私のコード:

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);
}
}
4

1 に答える 1

5

ではpaintComponent(Graphics g)ありませんpaintComponenet(Graphics g)

少なくとも、super.paintComponent(g)正しく呼び出しています。

paint*メソッドに注釈を付けると@Override、何が起こっているのかを理解するのに役立つコンパイル エラーが発生します。

于 2013-01-27T16:24:42.240 に答える