JFrame 框架调用 JPanel 的paintComponent

我实际上是在用 Java 学习图形。我无法理解这个JFrame对象如何调用extends的paintComponent方法。MyDrawpanelJPanel


在frame.repaint()再次调用paintComponent但如何?为什么我不能使用like 的drawPanel对象;MyDrawPaneldrawPanel.repaint()


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;


public class SimpleGui3C implements ActionListener

{

    JFrame frame;


    public static void main(String[] args)

    {

        SimpleGui3C gui = new SimpleGui3C();

        gui.go();

    }


    public void go() 

    {

        frame = new JFrame();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        JButton button = new JButton("Change Colors");

        button.addActionListener(this);


        MyDrawPanel drawPanel = new MyDrawPanel();


        frame.getContentPane().add(BorderLayout.SOUTH, button);

        frame.getContentPane().add(BorderLayout.CENTER, drawPanel);

        frame.setSize(300,300);

        frame.setVisible(true);

    }


    public void actionPerformed(ActionEvent event)

    {

        frame.repaint();

    }

}


class MyDrawPanel extends JPanel

{

    public void paintComponent(Graphics g)

    {

        g.fillRect(0,0,this.getWidth(), this.getHeight());


        int red = (int)(Math.random() * 255);

        int green = (int)(Math.random() * 255);

        int blue = (int)(Math.random() * 255);


        Color randomColor = new Color(red,green,blue);

        g.setColor(randomColor);

        g.fillOval(70,70,100,100);

    }

}


莫回无
浏览 206回答 1
1回答

慕工程0101907

为什么我不能像 drawPanel.repaint() 那样使用 MyDrawPanel 的 drawPanel 对象;当前,您的frame变量被定义为instance变量,因此可以在类的任何方法中引用它。但是,您的drawPanel变量被定义为local变量,因此只能在定义它的方法中引用。更改drawPanel变量,使其定义为instance变量,而不是local变量。然后就可以drawPanel.repaint()在actionPerformed(...)方法中使用了。在面板上调用 repaint() 会更有效,因为只会重绘面板,而不是框架和按钮。此外,您使用的是旧版本的 add(...) 方法。frame.getContentPane().add(BorderLayout.SOUTH, button);你应该使用:frame.getContentPane().add(button, BorderLayout.SOUTH);并且框架现在会将 add(...) 请求转发到内容窗格,因此您实际上可以使用:frame.add(button, BorderLayout.SOUTH);为自己节省一些打字时间。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java