java - 无法添加面板

标签 java swing jpanel

我的代码创建了一组按钮,但垂直对齐

enter image description here

现在我想做的是向这个面板添加一个 JLabel,但是当我创建一个新的 JPanel 时,我在运行它时遇到错误,但是代码没有给我任何冲突。如果可能的话,我想重新排列流程布局中的按钮。

我的完整代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public final class CharSearch extends Box {
    int i = 0;
    int error = 0;
    static JPanel panel;
    String original = "Dinosaur";
    String secret = new String(new char[original.length()]).replace('\0', '-');

    public CharSearch() {

        super(BoxLayout.Y_AXIS);
        for (char i = 'A'; i <= 'Z'; i++) {
            String buttonText = new Character(i).toString();
            JButton button = getButton(buttonText);
            add(button);
        }
        JLabel label = new JLabel(secret);
        JPanel panel = new JPanel();
        panel.add(label);
    }

    public JButton getButton(final String text) {
        final JButton button = new JButton(text);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (original.indexOf(text) != -1) {
                    JOptionPane.showConfirmDialog(null,
                            "Your word does contain" + text);
                } else {
                    JOptionPane.showConfirmDialog(null, "There is no" + text);
                }
                // If you want to do something with the button:
                button.setText("Clicked"); // (can access button because it's
                                            // marked as final)
            }
        });
        return button;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(panel);
                frame.setContentPane(new CharSearch());
                frame.pack();
                frame.setVisible(true);
                new CharSearch();
            }
        });
    }
}

这是我运行时遇到的错误

Error 异常是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JFrame.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at org.informatica.com.CharSearch$2.run(CharSearch.java:50)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

最佳答案

您正在向 JFrame 添加未定义的 JPanel 对象,导致 NullPointerException,如 Container#add(Component) 中所述文档。

frame.add(panel);

在将 panel 添加到 JFrame 的内容 Pane 容器之前,您必须对其进行实例化。

关于java - 无法添加面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133290/

相关文章:

java - JFrame : 'Random' size?

java - 将 JPanel 添加到 JList?

java : queue with maximum capacity

java - 解决方案: NoClassDefFoundError when dynamically compiling code

java - 单击按钮将对象从一个类传递到另一个类

java - 在此代码中使用 repaint() 方法

Java 最快的 OffsetDateTime 解析器

java - 使用 TimePicker 显示和检索 'seconds'

java - 为什么我的 java 应用程序模糊?

java - 在 SWING 中代表车辆