为什么GUI不显示?



这段代码有什么问题?GUI没有显示。这是我的实验室项目的4x4图片内存的GUI。如有任何帮助,不胜感激。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class memory extends JFrame implements ActionListener {
    String pictures[]
            = {"riven1.jpg", "riven2.jpg", "riven3.jpg", "riven4.jpg", "riven5.jpg", "riven6.jpg", "riven7.jpg", "riven8.jpg"};
    JButton button[];
    public memory() {
        Container c = getContentPane();
        setTitle("Memory Game");
        panel.setLayout(new GridLayout(4, 4));
        for (int x = 0; x < 16; x++) {
            button[x] = new JButton(new ImageIcon(pictures[x]));
            c.add(button[x]);
            button[x].addActionListener(this);
        }
        setSize(700, 700);
        setVisible(true);
        setLocationRelativeTo(null);
    }
    public void actionPerformed(ActionEvent e) {
    }
    public static void main(String args[]) {
        new memory();
    }
}

有很多问题…

第一:您从未初始化button[]

JButton button[];
public memory() {
    Container c = getContentPane();
    setTitle("Memory Game");
    panel.setLayout(new GridLayout(4, 4));
    for (int x = 0; x < 16; x++) {
        button[x] = new JButton(new ImageIcon(pictures[x]));

这将导致NullPointerException,因为button默认为null并且尚未初始化

在for循环之前初始化按钮,例如…

button = new JButton[16];

第二:您将所有按钮添加到内容窗格,其默认布局为BorderLayout。这意味着只有您添加的最后一个按钮将是可见的,占用整个窗口。

尝试设置内容窗格的布局管理器…

c.setLayout(new GridLayout(4, 4));

第三:panel是未定义的,所以你的例子甚至不应该编译

 // I have no idea how this is defined...
panel.setLayout(new GridLayout(4, 4));

旁注:尽量避免使用setSize,而应使用pack。这考虑了不同平台呈现字体等内容的差异。您还应该确保在使窗口可见之前设置了窗口的状态

    // Use pack instead
    //setSize(700, 700);
    pack();
    setLocationRelativeTo(null);
    setVisible(true);

相关内容

  • 没有找到相关文章

最新更新