2013-12-13 129 views
0

我目前正在编写一个接口,其中有一个JFrame类和两个JPanel类。当脚本第一次执行时,会显示面板A.我在面板A中有一个JButton,我希望在单击时显示面板B而不是面板A.摆动卡布局更改面板显示在用户的行动

有没有什么办法可以做到这一点?

+0

看看[这个问题和答案】(http://stackoverflow.com/a/20483818/2587435)。应该给你一些想法。 –

+0

*“谢谢 达里奥”*噪音,离开它。 –

回答

5

阅读tutorial

您可以使用CardLayoutnext()方法用于显示忘词,

,或者您可以使用show(...);用于显示特定的卡。

简单的例子:

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.JLabel; 
import javax.swing.JPanel; 

public class Example { 

    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 

     final JPanel panel = new JPanel(new CardLayout()); 

     JLabel l1 = new JLabel("1"); 
     JLabel l2 = new JLabel("2"); 
     JLabel l3 = new JLabel("3"); 

     panel.add(l1,"l1"); 
     panel.add(l2,"l2"); 
     panel.add(l3,"l3"); 

     JButton btn = new JButton("next"); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       CardLayout layout = (CardLayout) panel.getLayout(); 
       layout.next(panel); 
      } 
     }); 

     JButton btnSpec = new JButton("l3"); 
     btnSpec.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       CardLayout layout = (CardLayout) panel.getLayout(); 
       layout.show(panel, "l3"); 
      } 
     }); 

     frame.add(panel); 
     frame.add(btn,BorderLayout.SOUTH); 
     frame.add(btnSpec,BorderLayout.NORTH); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

}