【问题标题】:Why is the GUI not displayed为什么不显示 GUI
【发布时间】:2014-04-12 07:11:56
【问题描述】:

这段代码有什么问题? 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();
    }
}

【问题讨论】:

  • "..GUI 不显示" 你的意思是没有出现框架,没有出现框架的内容,还是别的什么?我可以看到(几个原因)为什么会发生第二次,但不是第一次。
  • 您确实意识到需要将panel 添加到框架或内容窗格 (c) 才能显示,对吧?现在我更仔细地查看了该代码,我意识到它甚至没有编译。这可能是一个重要因素。
  • 整体没有出现一般输出告诉内存线程“main”java.lang.NullPointerException中的这个异常。(memory.java:18)在memory.main(memory.java: 33)
  • 查看我的第二条评论的编辑,请不要再浪费我们的时间谈论运行时问题,同时发布永远不会那么远的代码。
  • “它会编译..” 我的编译器说的不同。 error: cannot find symbol. symbol: variable panel 看起来很奇怪,我相信编译器的评估胜过你的评估。

标签: java swing user-interface


【解决方案1】:

有很多问题...

首先:你永远不会初始化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);

【讨论】:

    猜你喜欢
    • 2019-10-18
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多