java - 如何将扩展的 jpanel 添加到 jframe

标签 java swing jframe jpanel

我写了一个扩展 JPanel 的类。 这是代码:

public class MedicalMonitorPanel extends JPanel{
    public MedicalMonitorPanel() {
        super();
        initComponents();
    }
    public void initComponents(){
        //layout settings
    }
}

现在我想将我的面板添加到 jframe 中:

public class MedicalMonitorDisplay extends JFrame{
    MedicalMonitorPanel panel;

    public MedicalMonitorDisplay(){
    panel = new MedicalMonitorPanel();
    initComponents();
}
    private void initComponents(){
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    getContentPane().add(panel);
    getContentPane().validate();
}
    public static void main(String[] args){
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MedicalMonitorDisplay().setVisible(true);
        }
    });
}
}

但是我遇到了这个异常:

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 MedicalMonitorDisplay.initComponents(MedicalMonitorDisplay.java:53)
    at MedicalMonitorDisplay.<init>(MedicalMonitorDisplay.java:40)
    at MedicalMonitorDisplay$1.run(MedicalMonitorDisplay.java:63)
    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)

报告 add() 方法有问题。怎么了?

最佳答案

这毫无意义:

add(panel, getContentPane());

删除此行并重新开始。

相反,您应该通过以下方式将面板添加到 contentPane:

getContentPane().add(panel);

如果这仍然不起作用,请告诉详细信息——如果您尝试这样做会出现什么问题?

此外,您不能在 contentPane 上调用 revalidate,除非您先将其转换为 JPanel。但是您无论如何都不需要重新验证 contentPane,因为您将在添加所有组件后调用 JFrame 上的 pack(),这就足够了。

关于java - 如何将扩展的 jpanel 添加到 jframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856573/

相关文章:

java - 是否可以在没有打印对话框的情况下打印 Swing 组件?

java - 处理发生时动态刷新 JTextArea?

java - 单击 map 上的更改标记图标

java - 如何在 Java 中四舍五入到最接近的 0.05?

Java 十六进制字符串连接校验和

java - Extending Java Swing Widgets(希望给 JSlider 添加动画和额外的标记)

java - 无法显示我的ArrayList

java - 动态调整 jframe/image 或滚动的大小

java - 如何在java中从另一个JFrame更新一个JFrame

java - 线程未运行,为什么 jframe setresizeable 不起作用