Anonymous
Anonymous

Reputation: 1

PaintComponent not being called netbeans GUI

I am completely new to netbean's graphics system, and have been struggling with a java textbook. I am trying to produce a simple program to display some things, and have followed the book exactly as it wants me to. I found in my research a bunch of other people with a similar issues. These people tend to be told to use dimensions and preferredSize methods, though neither of these are mentioned in the section of the book I am trying to reproduce in java. The following is my code:

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

Upvotes: 0

Views: 907

Answers (2)

camickr
camickr

Reputation: 324108

These people tend to be told to use dimensions and preferredSize methods

You should not really use setPreferredSize(). Instead, you should override the getPreferredSize() method to return a proper value.

Also, you should never invoke setPreferredSize() in the paintComponent() method or change any property of the class in the paintComponent() method.

Upvotes: 2

Howard
Howard

Reputation: 39187

I suppose there is a small typo in your code. You definitely mean to override paintComponent() and not paintComponents(). The first is called to paint the component, the second one to paint all components contained in your panel. Since there is none it will not be called.

Upvotes: 5

Related Questions