【问题标题】:How to make the paintComponent method work?如何使paintComponent 方法起作用?
【发布时间】:2021-06-21 14:30:55
【问题描述】:

我现在正在学习 Head First Java 书籍。而且我遇到了一个示例,该示例显示了如何覆盖 paintComponent 以便在具有整个 JPanel 的宽度和高度的黑色矩形上绘制一个随机颜色圆圈。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

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

import javax.swing.*;
import java.awt.event.*;

public class SimpleGui3 {
    public static void main(String[] args) {
        JFrame frame = new JFrame();


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

但我没有达到预期的效果:面板上什么也没画。

我做错了什么?如何做到这一点?

【问题讨论】:

  • 1) 您在哪里创建“MyDrawPanel”类的实例? 2)你在哪里将它添加到框架中? 3)不要在绘画方法中改变组件的状态。绘制方法应该只绘制当前状态。那就是不要使用“随机”逻辑。您无法控制何时重新绘制组件。阅读 Custom Painting 上的 Swing 教程部分,了解更多信息和工作示例。

标签: java swing jpanel paintcomponent


【解决方案1】:

您需要在 main 方法中添加两个内容才能使其工作。您必须实例化 MyDrawPanel() 类,然后将其添加到框架中。

MyDrawPanel p = new MyDrawPanel();

frame.add(p);

所以主要的方法应该是:

    public static void main(String[] args) {
         JFrame frame = new JFrame();
         MyDrawPanel p = new MyDrawPanel();
    
         frame.add(p);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setSize(300, 300);
         frame.setVisible(true);
    }

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多