0

私は netbean のグラフィック システムにまったく慣れていないので、Java の教科書に苦労しています。私はいくつかのものを表示するための簡単なプログラムを作成しようとしています. 私の調査で、同様の問題を抱えている他の多くの人々を見つけました。これらの人々は、寸法とpreferredSizeメソッドを使用するように言われる傾向があります. 以下は私のコードです:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame(); //create frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //makes x button end program
        frame.setSize(300,200); //determine the size of the frame
        ImageIcon image = new ImageIcon("panda.jpg");
        ColorPanel p = new ColorPanel(Color.pink, image);
        Container pane = frame.getContentPane();
        pane.add(p);
        frame.setVisible(true); //make frame show up
    }

}

public class ColorPanel extends JPanel {

    ImageIcon image;

    public ColorPanel(Color c, ImageIcon i){
        setBackground(c);
        image = i;
    }

    @Override
    public void paintComponents(Graphics g){
        super.paintComponents(g);
        setPreferredSize(new Dimension(100,100));
        System.out.println("Blah!");
        g.setColor(Color.blue);
        g.drawRect(10,25,40,30);
    }
}
4

2 に答える 2

5

コードに小さなタイプミスがあると思います。あなたは間違いなくオーバーライドするつもりpaintComponent()であり、そうではありませんpaintComponents()。1 つ目はコンポーネントをペイントするために呼び出され、2 つ目はパネルに含まれるすべてのコンポーネントをペイントするために呼び出されます。何もないので呼び出されません。

于 2011-06-02T17:15:38.800 に答える
2

これらの人々は、ディメンションと preferredSize メソッドを使用するように言われる傾向があります

実際には setPreferredSize() を使用しないでください。代わりに、 getPreferredSize() メソッドをオーバーライドして適切な値を返す必要があります。

また、paintComponent() メソッドで setPreferredSize() を呼び出したり、paintComponent() メソッドでクラスのプロパティを変更したりしないでください。

于 2011-06-02T19:04:36.720 に答える