首页 > 解决方案 > 如何在 JFrame 内的 JPanel 内显示 JPanel?

问题描述

我正在尝试在 JPanel 内显示一个 JPanel 类,该类设置在 JFrame 类内的 JPanel 内显示的 JPanel 类内。

让 JPanel 类显示在 JFrame 类中是可行的,但是当我尝试在第一个 JPanel 类中显示另一个 JPanel 类时,它不会显示。

我正在使用带有 GUI Builder 插件的 Netbeans 8.2,如果有任何更好的方法可以在需要时显示这些嵌套的 GUI 元素,我也将不胜感激。

JFrame:

public class MitarbeiterUI extends javax.swing.JFrame {

    private javax.swing.JPanel container;

    public MitarbeiterUI(Mitarbeiter mitarbt) {
        initComponents();

        setExtendedState(MAXIMIZED_BOTH);
    }

    private void initComponents() {
        //Auto generated initializer
    }

    private void TarifButtonActionPerformed(java.awt.event.ActionEvent evt) {

        TarifDialog dialog = new TarifDialog(this);
        dialog.setVisible(true);

        container.removeAll();
        container.validate();
        container.updateUI();
        container.add(dialog);
    }    

    public void updatePanel(JPanel panel) {
        container.removeAll();
        container.validate();
        container.updateUI();
        container.add(panel);
    } 
}

主要的JPanel:

public class TarifDialog extends javax.swing.JPanel {

    private Boolean sPanelVisible = false;
    private Boolean wPanelVisible = false;
    private Boolean ePanelVisible = false;

    private KontinuierlicherTarifDialog kdialog;      //Nested JDialog class
    private EinmaligerTarifDialog edialog;            //Nested JDialog class
    private MitarbeiterUI parent;

    private javax.swing.JPanel pnContainer;
    private javax.swing.JRadioButton rbEinmaligerTarif;
    private javax.swing.JRadioButton rbStandardTarif;
    private javax.swing.JRadioButton rbWiederkehrenderTarif;

    public TarifDialog(MitarbeiterUI parent) {

        this.parent = parent;
        initComponents();

    }

    private void initComponents() {
        //Auto generated initializer
    }

    private void rbWiederkehrenderTarifStateChanged(javax.swing.event.ChangeEvent evt) {                                                    
        if (rbWiederkehrenderTarif.isSelected() && !wPanelVisible) {
            kdialog = new KontinuierlicherTarifDialog();
            kdialog.setVisible(true);

            pnContainer.removeAll();
            pnContainer.validate();
            pnContainer.updateUI();
            pnContainer.add(kdialog);

            ePanelVisible = false;
            wPanelVisible = true;
            sPanelVisible = false;

            parent.updatePanel(this);

        }
    }                                                   

    private void rbEinmaligerTarifStateChanged(javax.swing.event.ChangeEvent evt) {                                               
        if (rbEinmaligerTarif.isSelected() && !ePanelVisible) {
            edialog = new EinmaligerTarifDialog();
            edialog.setVisible(true);

            pnContainer.removeAll();
            pnContainer.validate();
            pnContainer.updateUI();
            pnContainer.add(edialog);

            ePanelVisible = true;
            wPanelVisible = false;
            sPanelVisible = false;

            parent.updatePanel(this);

        }
    }                                              

    private void rbStandardTarifStateChanged(javax.swing.event.ChangeEvent evt) {                                             
        if (rbStandardTarif.isSelected() && !sPanelVisible) {
            pnContainer.removeAll();
            pnContainer.validate();
            pnContainer.updateUI();

            ePanelVisible = false;
            wPanelVisible = false;
            sPanelVisible = true;

            parent.updatePanel(this);

        }
    } 
}     

嵌套的 FPanel 类之一:

public class EinmaligerTarifDialog extends javax.swing.JPanel {

    public EinmaligerTarifDialog() {
        initComponents();
        this.setVisible((true));
    }

    private void initComponents() {
        //Auto generated initializer
    }
}

标签: java

解决方案


推荐阅读