Java 我无法在图形顶部显示按钮

Java 我无法在图形顶部显示按钮,java,swing,graphics,Java,Swing,Graphics,我的问题是如何在用图形创建的圆的顶部显示按钮。我的代码是: public class Grafik extends JFrame { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Grafik frame =

我的问题是如何在用图形创建的圆的顶部显示按钮。我的代码是:

public class Grafik extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Grafik frame = new Grafik();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public Grafik() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 784, 419);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton btnNewButton = new JButton("Click");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                fire();
            }
        });

        btnNewButton.setBounds(64, 73, 32, 32);
        contentPane.add(btnNewButton);
    }

    public void fire()
    {
        JPanel panel = new JPanel(){
            @Override
            public void paint(Graphics g)
            {
                g.setColor(Color.black);
                g.drawOval(20, 20, 400, 400);
                g.fillOval(20,20,400,400);

                g.setColor(Color.white);
                g.drawOval(60, 60, 300, 300);
                g.fillOval(60,60,300,300);



            }
        };

        panel.setBounds(10, 27, 383, 233);
        setContentPane(panel);

        JButton btn = new JButton();
        btn.setIcon(new ImageIcon("C:\\Users\\nuria\\Desktop\\icon1.png"));
        btn.setBounds(75, 76, 32, 32);
        panel.add(btn);

    }   
}
这段代码是我项目的一小部分。我的项目中有很多面板,我的fire方法并不是第一次被调用。我的意思是第六个面板调用了fire方法。我得用钮扣画两个圆。这些按钮应该在两个圆圈之间。但是我不能直接显示按钮。当我悬停按钮时,它们会显示出来。我想在第六个面板打开时立即显示按钮。 我上面有两个按钮。单击第一个按钮时,另一个面板应打开并显示用图形创建的圆圈和另一个按钮,按钮之间带有图标

    JPanel panel = new JPanel(){
        @Override
        public void paint(Graphics g)
        {
不要覆盖油漆。自定义绘制是通过重写paintComponent完成的,不要忘记调用super.paintComponent作为第一条语句

当前代码的问题在于,通过覆盖绘制,您已经更改了面板的默认绘制逻辑,并且从未绘制子组件


有关更多信息和示例,请查看Swing教程中的部分,特别是关于更详细地了解绘制机制的部分。

1请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。为此,请选择文本并单击邮件发布/编辑表单顶部的{}按钮。2 Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。