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
的实例,并将内存组件添加到其中,使此框架可见。您可能想仔细查看一下