簡體   English   中英

如何將擴展的jpanel添加到jframe

[英]how to add an extended jpanel to jframe

我寫了一個擴展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);

如果仍然無法解決問題,請告訴細節-嘗試這樣做會出什么問題?

另外,除非先將其轉換為JPanel,否則您不能在contentPane上調用revalidate。 但是無論如何您都不需要重新驗證contentPane,因為在添加所有組件之后您將在JFrame上調用pack() ,這樣就足夠了。

嘗試使用SwingUtilities而不是EventQueue

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new MedicalMonitorDisplay().setVisible(true);
        }
    });
}

我還將遵循Hovercraft Full Of Eels的建議,即修改您的代碼以按照他指示的方式將panel添加到JFrame


編輯

該問題是由於使用MedicalMonitorPanel數組時缺少MedicalMonitorPanel類的實例引起的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM