【问题标题】:Java - paintComponent won't show drawings on JPanelJava - paintComponent 不会在 JPanel 上显示绘图
【发布时间】:2013-07-09 22:28:32
【问题描述】:

我在尝试使用JPanel 时被卡住了。我已经学会了如何创建JFrameJPanel、添加事件处理程序、在小程序中做同样的事情,以及其他一些基本的 GUI 开发。但是每次我尝试使用paintComponent(Graphics g)paint(Graphics g) 方法绘制JPanel 时,什么都没有出现。按钮以及其他 JComponents 显示得很好。但是g.drawStringg.drawRect 等会导致JFrame 窗口空白。

这是我的代码:

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

public class Game extends JPanel {
    public static void main(String[] args) {
        new Game().game();
    }

    JPanel panel;
    JButton button2;
    JButton button;

    public void game() {
        panel = new JPanel();
        button = new JButton("Ok");
        panel.setLayout(new FlowLayout());
        panel.add(button);

        button2 = new JButton("Cancel");

        JFrame frame = new JFrame("Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setResizable(false);
        frame.add(panel);

        frame.setVisible(true); 
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("hi",100,100);
        g.fillRect(100,50,200,300)
    }
}

【问题讨论】:

    标签: java swing jframe jpanel paintcomponent


    【解决方案1】:

    您添加到JFrameJPanel 是普通的JPanel,而不是Game 的实例,您的自定义类包含paintComponent() 方法。你需要把那一行改成

    JPanel panel = new Game();
    

    您应该立即看到不同之处!

    您在main() 中创建的Game 实例除了调用game() 方法外没有用于任何用途。如果你愿意,你可以通过这样做来使用它:

    JPanel panel = this;
    

    然后像以前一样继续。

    【讨论】:

    • 非常感谢欧内斯特!有效!但我只是不明白类的实例是什么意思。你能解释一下“JPanel panel = new Game();”吗?再次感谢您的时间和精力!
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多