JLabels数组不会显示



>我正在尝试制作一个具有标题面板,信息部分面板(InfoSect)的GUI,然后是一个面板,用户将在其中键入和更改信息部分中的值。现在我只是试图让面板显示。我不断收到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) 

您对该程序的问题在于一系列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 数组,但您无法像这样添加整个数组,因此您可以删除该行,因为您已经在将每个 JLabel 添加到您add(info[col])displayInfo()的另一个函数中。

这可能适用于您想要执行的操作。

最新更新