PaintComponent не называется NetBeans GUI - PullRequest
0 голосов
/ 02 июня 2011

Я совершенно новичок в графической системе Netbean, и я боролся с учебником по Java.Я пытаюсь создать простую программу для отображения некоторых вещей, и я следовал этой книге именно так, как мне того хотелось.Я нашел в своем исследовании кучу других людей с похожими проблемами.Этим людям обычно говорят использовать измерения и методы предпочитаемого размера, хотя ни один из них не упоминается в разделе книги, который я пытаюсь воспроизвести в 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 ]

5 голосов
/ 02 июня 2011

Полагаю, в вашем коде есть небольшая опечатка.Вы определенно хотите переопределить paintComponent(), а не paintComponents().Первый вызывается для рисования компонента, второй - для рисования всех компонентов, содержащихся на вашей панели.Поскольку его нет, он не будет называться.

2 голосов
/ 02 июня 2011

Этим людям обычно говорят, что они используют измерения и методы предпочитаемого размера

На самом деле вы не должны использовать setPreferredSize ().Вместо этого вы должны переопределить метод getPreferredSize () для возврата правильного значения.

Кроме того, вы никогда не должны вызывать setPreferredSize () в методе paintComponent () или изменять любое свойство класса в методе paintComponent ().

...