Java 为什么按下8号按钮时图形不工作?

Java 为什么按下8号按钮时图形不工作?,java,swing,Java,Swing,我有这个代码,它与所有的工作,直到底部的中间按钮被按下 import java.awt.*; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JLabel; import java.awt.event.ActionEven

我有这个代码,它与所有的工作,直到底部的中间按钮被按下

import java.awt.*;

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

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JLabel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class memory extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.setColor(new Color(156, 93, 82));
        g.fill3DRect(21, 3, 7, 12, true);
        g.setColor(new Color(156, 23, 134));
        g.fillOval(1, 15, 15, 15);
        g.fillOval(16, 15, 15, 15);
        g.fillOval(31, 15, 15, 15);
        g.fillOval(7, 31, 15, 15);
        g.fillOval(22, 31, 15, 15);
        g.fillOval(16, 47, 15, 15);
    }

    public memory() {

        GridLayout h = new GridLayout(3, 3);
        final JFrame frame = new JFrame();
        final JPanel pan = new JPanel(h);
        frame.add(pan);
        //pan=new JPanel(h);
        pan.setBackground(new Color(130, 224, 190));
        setFont(new Font("Serif", Font.BOLD, 28));
        JButton button1 = new JButton();
        pan.add(button1);
        final JLabel label1 = new JLabel("hi");
        label1.setVisible(false);
        pan.add(label1);
        JButton button2 = new JButton();
        pan.add(button2);
        final JLabel label2 = new JLabel("hi");
        label2.setVisible(false);
        pan.add(label2);
        JButton button3 = new JButton();
        pan.add(button3);
        final JLabel label3 = new JLabel("hi");
        label3.setVisible(false);
        pan.add(label3);
        JButton button4 = new JButton();
        pan.add(button4);
        final JLabel label4 = new JLabel("hi");
        label4.setVisible(false);
        pan.add(label4);
        JButton button5 = new JButton();
        pan.add(button5);
        final JLabel label5 = new JLabel("hi");
        label5.setVisible(false);
        pan.add(label5);
        JButton button6 = new JButton();
        pan.add(button6);
        final JLabel label6 = new JLabel("hi");
        label6.setVisible(false);
        pan.add(label6);
        JButton button7 = new JButton();
        pan.add(button7);
        final JLabel label7 = new JLabel("hi");
        label7.setVisible(false);
        pan.add(label7);
        JButton button8 = new JButton();
        pan.add(button8);
        final JLabel label8 = new JLabel("hi");
        label8.setVisible(false);
        pan.add(label8);
        JButton button9 = new JButton();
        pan.add(button9);
        final JButton button10 = new JButton("Exit");
        pan.add(button10);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("memory Game");
        setLayout(new BorderLayout());
        add(pan, BorderLayout.CENTER);
        add(button10, BorderLayout.SOUTH);
        setSize(600, 600);
        setVisible(true);
        final JLabel label9 = new JLabel("hi");
        label9.setVisible(false);
        pan.add(label9);
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label1.setVisible(true);
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label2.setVisible(true);
            }
        });
        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label3.setVisible(true);
            }
        });
        button4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label4.setVisible(true);
            }
        });
        button5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label5.setVisible(true);
            }
        });
        button6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label6.setVisible(true);
            }
        });
        button7.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label7.setVisible(true);
            }
        });
//this is where I thought it was going to do something if it was pressed.
        button8.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label8.setVisible(true);
                frame.getContentPane().add(new memory());
                setVisible(true);

            }
        }
                );
        button9.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                label9.setVisible(true);
            }
        }
                );
        button10.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if (button10.getSize() != null) {
                    System.exit(0);
                }
            }
        });

    }

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

}

内存
扩展
JFrame
。Swing不允许您将一个窗口添加到另一个窗口

您应该避免从顶级容器进行扩展(这正是原因),而是使用类似于
JPanel
的东西

这允许您将组件添加到您喜欢的任何容器中

JFrame
没有
paintComponent
方法,因此永远不会调用它。它编译的原因是您调用了
super.paintComponents
(注意末尾的
s


相反,您应该从
JPanel
扩展,覆盖它的
paintComponent
方法,并从那里执行自定义绘制

1-没有
JFrame
paintComponent
…抱歉,但是您会怎么做?如何覆盖paintComponent?对不起,我对这整件事真的很陌生…@user2853125从查看更多详细信息开始Sok,所以我想我已经修复了它,但它现在没有打开,所以我该怎么办?我所做的只是将其更改为扩展JPanel,并在此行的公共组件(图g)上添加@Override{那我该怎么办?请有人帮忙1-确保您正在调用
super.paintComponent
而不是
super.paintComponents
。创建
JFrame
的实例,并将
内存
组件添加到其中,使此框架可见。您可能想仔细查看一下