【问题标题】:Array of JLabels won't Display [duplicate]JLabels 数组不会显示[重复]
【发布时间】:2018-12-26 07:08:46
【问题描述】:

我正在尝试制作一个 GUI,它具有标题面板、信息部分面板 (InfoSect),以及稍后在用户将在信息部分中键入和更改值的面板上。现在我被困在试图让面板显示。我不断收到 InfoSect 面板的错误,其中我有一组 JLabels。我想我初始化错了,但我不确定如何或为什么。它似乎也影响了更简单的标题面板的显示。希望能帮助您在 GUI 中显示此面板。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI extends JFrame{

    private JPanel main;
    Title tle1;
    InfoSect is;

    public GUI() {  
        main = new JPanel();
        tle1 = new Title();
        is = new InfoSect();

        main.setLayout(new BorderLayout());
        main.setBackground(Color.GRAY);

        add(main);
        main.add(tle1, BorderLayout.NORTH);
        main.add(is, BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(900,700);
        setVisible(true);
    }

    public static class Title extends JPanel{
        private JLabel title;

        public Title() {
            title = new JLabel("Change the Values");
            setLayout(new FlowLayout());
            add(title);
        }
    }

    public static class InfoSect extends JPanel{

        private JLabel[] info;
        private int COL = 4;

        public InfoSect() {
            info = new JLabel[COL];
            setLayout(new FlowLayout());
            displayInfo();
            add(info[COL]);
        }

        public void displayInfo() {
            for(int col=0;col<COL;col++) {
                Font font1 = new Font(Font.SANS_SERIF,Font.PLAIN,10);
                info[col].setFont(font1);
                info[col].setText("Holder");
                add(info[col]);
            }
        }
    }

}

例外是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at build001.GUI$InfoSect.displayInfo(GUI.java:59) 
at build001.GUI$InfoSect.<init>(GUI.java:52) 
at build001.GUI.<init>(GUI.java:20) 

【问题讨论】:

  • 你得到什么错误?
  • 在 build001.GUI$InfoSect.displayInfo(GUI.java:59) 在 build001.GUI$InfoSect.(GUI .java:52) 在 build001.GUI.(GUI.java:20)

标签: java arrays swing nullpointerexception jlabel


【解决方案1】:

这个程序的问题在于JLabel[] info的数组

info = new JLabel[COL];

这一行只会初始化你的 JLabel 数组,而不是每个 JLabel。

所以你可以修改你的displayInfo()函数如下来单独初始化JLabel。

public void displayInfo() {
        for(int col=0;col<COL;col++) {
            Font font1 = new Font(Font.SANS_SERIF,Font.PLAIN,10);
            info[col] = new JLabel();
            info[col].setFont(font1);
            info[col].setText("Holder");
            add(info[col]);
        }
}

infoSect() 函数中的代码还有一个问题,即您通过编写 add(info[COL]) 一次添加整个 JLabel 数组,但您不能像这样添加整个数组,因此您可以删除该行,因为您已经在 add(info[col]) 中将每个 JLabel 添加到您的另一个函数 displayInfo() 中。

这可能适用于您想做的事情。

【讨论】:

  • “你正在一次添加整个 JLabel 数组”这是不正确的。 add(info[COL]) 只添加一个元素,而不是整个数组。
  • 如果你仔细观察,那么我不会一次添加整个数组,我只是添加单个元素,这行不是add(info[COL]),而是add(info[col]),col 是小写字母而不是大写字母我也在 para 中解释了同样的事情,你不能一次添加整个数组,所以我建议从 infoSect() 函数中删除该行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 2019-02-06
相关资源
最近更新 更多