我尝试了所有方法,但似乎无法在 jframe 中绘制某些内容

问题描述

我是 Java 新手,我需要帮助才能使其正常工作。我尝试了paintComponent、super 等等。我不明白我做错了什么。我只是想制作一个简单的圆圈。我第一次尝试了不同的课程,但现在我只回到了一个

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JPanel{
    
    private static final long serialVersionUID = 1L;
    private JFrame frame;
    private JPanel panel;

    public Main() {
        
        frame = new JFrame();
        panel = new JPanel();
        
        frame.add(panel);
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("shotergame");
        
        panel.setPreferredSize(new Dimension(1000,600));
        
        frame.pack();
        frame.setVisible(true);
        frame.setLocationRelativeto(null);
        
    }
    
    @Override
    public void paint(Graphics g) {
        
        Graphics2D g2d = (Graphics2D) g;
        
        g2d.setColor(Color.RED);
        g2d.drawoval(100,100,50,50);
        g2d.filloval(100,50);
        
    }

    public static void main(String[] args) {
        
        new Main();

    }
    
    

}

解决方法

Main 是要添加到 JPanelJFrame
panel 实例不执行任何操作,您应该删除它并在构造函数中使用 this 实例。

public class Main extends JPanel {
    private static final long serialVersionUID = 1L;
    private JFrame frame;

    public Main() {
        frame = new JFrame();
        frame.add(this); // Add "this" instance
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("shotergame");
        
        // Set preferred size to "this" instance
        setPreferredSize(new Dimension(1000,600));
        
        frame.pack();
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    (...)
}