为了账号安全,请及时绑定邮箱和手机立即绑定

JFrame 框架调用 JPanel 的paintComponent

JFrame 框架调用 JPanel 的paintComponent

莫回无 2021-08-19 21:19:25
我实际上是在用 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);    }}
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

为什么我不能像 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);

为自己节省一些打字时间。


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信