Add / Remove Panel

Status
Nicht offen für weitere Antworten.

chrissy

Bekanntes Mitglied
Hallo,

wie kann man es realisieren, dass ein und dass selbe Panel ein-/ und ausgeblendet wird. Beim Einblenden ist es aber möglich, daß sich die Eingabefelder in dem Panel ändern.
Ich habe es bisher so versucht:
Code:
  private void showStep2(int iSelect)
  {
    this.getContentPane().add(pnlStep2, 
                              new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
                                                     new Insets(0, 0, 0, 0), 100, 0));
    pnlStep2.setVisible(true);
    GridBagLayout layoutInput = new GridBagLayout();
    pnlStep2.setLayout(layoutInput);
    String[] comboSelect = {"Case1", "Case2", "Case3", "Case4", "Case5"};
    cboCase = new JComboBox(comboSelect);
    JLabel lblStep1 = new JLabel("<html>[b]<u>Step 2 - Fall-Unterscheidung</u>[/b]</html>");
    btnNext2 = new JButton("Go to Step 3 >");
    btnNext2.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {
       if (! pnlStep3.isShowing())
        showStep3();
      }  
    });
    btnBack2 = new JButton("< Back to Step 1");
    btnBack2.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {
        hideStep2();
      }  
    });
    pnlStep2.add(lblStep1, 
                 new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, 
                                        new Insets(0,0,10,0), 0, 0));
    pnlStep2.add(cboCase, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0, 
                               GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 2, 0), 70, 0)); 
    pnlStep2.add(btnBack2, 
                 new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 
                                        new Insets(0,0,0,0), 0, 0));
    pnlStep2.add(btnNext2, 
                 new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 
                                        new Insets(0,0,0,0), 0, 0));
    pnlStep2.setPreferredSize(new Dimension(100, 50));
    pnlStep2.validate();
  }
  
  private void hideStep2()
  {
    pnlStep2.removeAll();
    this.getContentPane().remove(pnlStep2);
    this.validate();
  }

Ich habe zwei Panels ... das zweite Panel wird per Button-Klick vom ersten Panel aufgerufen. Beim Klick auf den Button "Back" wird das zweite Panel entfernt und nur das erste Panel angezeigt (funktioniert anscheinend richtig). Wenn ich nun im ersten Panel wieder auf den Button "Next" klicke, soll Panel2 wieder angezeigt werden, im GridBagLayout in der Zelle daneben (das funktioniert nicht mehr). Panel1 bleibt mittig ausgerichtet im Layout und Panel2 legt sich darüber (eigentlich an der richtigen Stelle, nur Panel1 wird nicht an der richtigen Stelle angezeigt). Außerdem funktioniert der Button auf Panel2 nicht mehr (das Panel wird nicht mehr ausgeblendet).
Irgendwie steh ich auf der Leitung ...

Danke
chrissy
 
chrissy hat gesagt.:
..Ich habe zwei Panels ... das zweite Panel wird per Button-Klick
vom ersten Panel aufgerufen. Beim Klick auf den Button "Back" wird das zweite Panel
entfernt und nur das erste Panel angezeigt..
Hier ist sowas ähnliches, vielleicht kannst du damit ja was anfangen:
Code:
/*
 * ShowHideDetailsDemo.java
 */
package layout;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class ShowHideDetailsDemo extends JFrame {
    public ShowHideDetailsDemo() {
        super("ShowHideDetailsDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        mainPanel = new JPanel();
        leftPanel = new JPanel();
        scrollingInfoPanel = new JScrollPane();
        infoPanel = new JPanel();
        summaryDetailPanel1 = new JPanel();
        summary1 = new JPanel();
        summaryLabel1 = new JLabel();
        detailButton1 = new JButton();
        detail1 = new JPanel();
        detailLabel1 = new JLabel();
        summaryDetailPanel2 = new JPanel();
        summary2 = new JPanel();
        summaryLabel2 = new JLabel();
        detailButton2 = new JButton();
        detail2 = new JPanel();
        detailLabel2 = new JLabel();
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent evt) {
                formComponentResized(evt);
            }
        });
        getContentPane().add(mainPanel, BorderLayout.CENTER);
        leftPanel.setLayout(new BorderLayout());
        infoPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
        infoPanel.setPreferredSize(new Dimension(150, 10));
        summaryDetailPanel1.setLayout(new BorderLayout());
        summaryLabel1.setText("Summary 1");
        summary1.add(summaryLabel1);
        detailButton1.setText("Detail");
        detailButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                detailButton1ActionPerformed(evt);
            }
        });
        summary1.add(detailButton1);
        summaryDetailPanel1.add(summary1, BorderLayout.CENTER);
        detailLabel1.setText("Detail 1");
        detail1.add(detailLabel1);
        summaryDetailPanel1.add(detail1, BorderLayout.SOUTH);
        infoPanel.add(summaryDetailPanel1);
        summaryDetailPanel2.setLayout(new BorderLayout());
        summaryLabel2.setText("Summary 2");
        summary2.add(summaryLabel2);
        detailButton2.setText("Detail");
        detailButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                detailButton2ActionPerformed(evt);
            }
        });
        summary2.add(detailButton2);
        summaryDetailPanel2.add(summary2, BorderLayout.CENTER);
        detailLabel2.setText("Detail 2");
        detail2.add(detailLabel2);
        summaryDetailPanel2.add(detail2, BorderLayout.SOUTH);
        infoPanel.add(summaryDetailPanel2);
        scrollingInfoPanel.setViewportView(infoPanel);
        scrollingInfoPanel.setHorizontalScrollBarPolicy(
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        leftPanel.add(scrollingInfoPanel, BorderLayout.CENTER);
        getContentPane().add(leftPanel, BorderLayout.WEST);
    }
    private void formComponentResized(ComponentEvent evt) {
        setInfoSize();
    }
    private void detailButton2ActionPerformed(ActionEvent evt) {
        detail2.setVisible( !detail2.isVisible() );
        setInfoSize();
    }
    private void detailButton1ActionPerformed(ActionEvent evt) {
        detail1.setVisible( !detail1.isVisible() );
        setInfoSize();
    }
    private void setInfoSize(){
        infoPanel.setPreferredSize(new Dimension(150,
                (int)summary1.getSize().getHeight()
                +(int)summary2.getSize().getHeight()
                +(detail1.isVisible()?(int)detail1.getSize().getHeight():0)
                +(detail2.isVisible()?(int)detail2.getSize().getHeight():0)
                +20));
    }
    public static void main(String args[]) {
        new ShowHideDetailsDemo().setVisible(true);
    }
    private JButton detailButton1, detailButton2;
    private JScrollPane scrollingInfoPanel;
    private JPanel mainPanel, leftPanel, infoPanel, summaryDetailPanel1, summaryDetailPanel2,
            summary1, summary2, detail1,detail2;
    private JLabel summaryLabel1, summaryLabel2, detailLabel1, detailLabel2;
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben