PaintComponent未被称为netbeans GUI

时间:2011-06-02 17:07:53

标签: java swing paintcomponent

我是netbean的图形系统的新手,并且一直在努力学习java教科书。我正在尝试制作一个简单的程序来显示一些东西,并按照它的要求完全按照本书。我在研究中发现了其他一些有类似问题的人。这些人倾向于被告知使用维度和preferredSize方法,尽管在我试图在java中重现的书的部分中没有提到这些。以下是我的代码:

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

2 个答案:

答案 0 :(得分:5)

我想你的代码中有一个小错字。你绝对想要覆盖paintComponent()而不是paintComponents()。第一个用于绘制组件,第二个用于绘制面板中包含的所有组件。因为没有,所以不会被召唤。

答案 1 :(得分:2)

  

这些人倾向于被告知使用维度和preferredSize方法

你不应该真的使用setPreferredSize()。相反,您应该重写getPreferredSize()方法以返回正确的值。

此外,您不应该在paintComponent()方法中调用setPreferredSize()或更改paintComponent()方法中类的任何属性。