2016-11-20 67 views
-1

如何用同一个容器中的简单按钮单击来替换其内容的JPanelJFrame &?用另一个替换面板

+3

码是什么你有没有尝试过? 在问之前,我们希望看到你之前已经尝试过的东西。 –

+0

谷歌搜索? –

+2

使用['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html)如[本答案]中所示(http://stackoverflow.com /一个/418556分之5786005)。 –

回答

0

诀窍是使用CardLayout或修改面板可见性。 请看以下修改面板可见性的示例。

public class PanelExample { 
private JPanel _myPanel1,_myPanel2; 
public void init() { 
    JFrame frame = new JFrame("Testing"); 
    JPanel mainPanel = new JPanel(new GridBagLayout()); 

    _myPanel1 = new JPanel(); 
    _myPanel1.add(new JLabel("Panel 1")); 
    _myPanel1.setVisible(true); 

    _myPanel2 = new JPanel(); 
    _myPanel2.add(new JLabel("Panel 2")); 
    _myPanel2.setVisible(false); 

    JButton button = new JButton("Switch to Panel2"); 
    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if(_myPanel1.isVisible()) { 
       _myPanel1.setVisible(false); 
       _myPanel2.setVisible(true); 
       button.setText("Switch to Panel1"); 
      } else { 
       _myPanel1.setVisible(true); 
       _myPanel2.setVisible(false); 
       button.setText("Switch to Panel2"); 
      } 

     } 
    }); 

    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.anchor = GridBagConstraints.PAGE_START; 
    gbc.fill = GridBagConstraints.HORIZONTAL; 
    gbc.weightx = 1; 
    gbc.weighty = 0; 

    mainPanel.add(button,gbc); 

    gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.anchor = GridBagConstraints.CENTER; 
    gbc.fill = GridBagConstraints.BOTH; 
    gbc.gridwidth = 2; 
    gbc.gridheight = 2; 
    gbc.weightx = 1; 
    gbc.weighty = 1; 
    mainPanel.add(_myPanel1,gbc); 
    mainPanel.add(_myPanel2,gbc); 

    frame.add(mainPanel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 
} 
public static void main(String[] args) { 
    PanelExample exmp = new PanelExample(); 
    exmp.init(); 
} 

}

0

这里一个简单的例子,你可以遵循请出示在免得所以我们可以按照你的问题的代码,这个瞬间从不知情的源(旧)

package layout; 

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class CardLayoutExample extends JFrame{ 
    JPanel totelPanel,btnPan,showPan; 
    JButton btn1,btn2; 

    public static void main(String[] args) { 
     CardLayoutExample ex = new CardLayoutExample(); 
     ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     ex.pack(); 
     ex.setLocationRelativeTo(null); 
     ex.setTitle("BookClube library system"); 
     ex.setVisible(true); 
    } 

    public CardLayoutExample(){ 
     btn1 = new JButton("menu button"); 
     btn2 = new JButton("back button"); 
     CardLayout c1 = new CardLayout(); 

     btnPan = new JPanel(); 
     btnPan.add(btn1); 

     showPan = new JPanel(); 
     showPan.add(btn2); 

     totelPanel = new JPanel(c1); 
     totelPanel.add(btn1,"1"); 
     totelPanel.add(btn2,"2"); 
     c1.show(totelPanel,"1"); 

     JPanel fullLayout = new JPanel(new BorderLayout()); 
     fullLayout.add(totelPanel,BorderLayout.NORTH); 

     add(fullLayout); 
     btn1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       c1.show(totelPanel,"2"); 
      } 
     }); 

     btn2.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       c1.show(totelPanel,"1"); 
      } 
     }); 


    } 

}