查看: 629|回复: 0

[Java语言] Java卡片布局管理器解释及实例

发表于 2017-9-29 08:00:01
尚学堂AD

由 CardLayout 类实现的布局管理器称为卡片布局管理器,用来操纵其所管理容器中包含的容器或组件。每个直接添加到其所管理容器中的容器或组件为一个卡片,最先被添加的容器或组件被认为是第一个卡片,最后被添加的则为最后一个卡片,初次运行时将显示第一个卡片。下面,我们就来通过一个实例看看它是怎么用的。

源码:

  1. import java.awt.BorderLayout;
  2. import java.awt.CardLayout;
  3. import java.awt.Color;
  4. import java.awt.Insets;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.UIManager;
  12. public class TestMain extends JFrame {
  13. private JPanel pane = null; // 主要的JPanel,该JPanel的布局管理将被设置成CardLayout
  14. private JPanel p = null; // 放按钮的JPanel
  15. private CardLayout card = null; // CardLayout布局管理器
  16. private JButton button_1 = null; // 上一步
  17. private JButton button_2 = null; // 下一步
  18. private JButton b_1 = null, b_2 = null, b_3 = null; // 三个可直接翻转到JPanel组件的按钮
  19. private JPanel p_1 = null, p_2 = null, p_3 = null; // 要切换的三个JPanel
  20. public TestMain() {
  21. super("CardLayout Test");
  22. try {
  23. // 将LookAndFeel设置成Windows样式
  24. UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  25. } catch (Exception ex) {
  26. ex.printStackTrace();
  27. }
  28. /**创建一个具有指定的水平和垂直间隙的新卡片布局*/
  29. card = new CardLayout(5, 5);
  30. pane = new JPanel(card); // JPanel的布局管理将被设置成CardLayout
  31. p = new JPanel(); // 构造放按钮的JPanel
  32. button_1 = new JButton("< 上一步");
  33. button_2 = new JButton("下一步 >");
  34. b_1 = new JButton("1");
  35. b_2 = new JButton("2");
  36. b_3 = new JButton("3");
  37. b_1.setMargin(new Insets(2,2,2,2));
  38. b_2.setMargin(new Insets(2,2,2,2));
  39. b_3.setMargin(new Insets(2,2,2,2));
  40. p.add(button_1);
  41. p.add(b_1);
  42. p.add(b_2);
  43. p.add(b_3);
  44. p.add(button_2);
  45. p_1 = new JPanel();
  46. p_2 = new JPanel();
  47. p_3 = new JPanel();
  48. p_1.setBackground(Color.RED);
  49. p_2.setBackground(Color.BLUE);
  50. p_3.setBackground(Color.GREEN);
  51. p_1.add(new JLabel("JPanel_1"));
  52. p_2.add(new JLabel("JPanel_2"));
  53. p_3.add(new JLabel("JPanel_3"));
  54. pane.add(p_1, "p1");
  55. pane.add(p_2, "p2");
  56. pane.add(p_3, "p3");
  57. /**下面是翻转到卡片布局的某个组件,可参考API中的文档*/
  58. button_1.addActionListener(new ActionListener(){ // 上一步的按钮动作
  59. public void actionPerformed(ActionEvent e) {
  60. card.previous(pane);
  61. }
  62. });
  63. button_2.addActionListener(new ActionListener(){ // 下一步的按钮动作
  64. public void actionPerformed(ActionEvent e) {
  65. card.next(pane);
  66. }
  67. });
  68. b_1.addActionListener(new ActionListener() { // 直接翻转到p_1
  69. public void actionPerformed(ActionEvent e) {
  70. card.show(pane, "p1");
  71. }
  72. });
  73. b_2.addActionListener(new ActionListener() { // 直接翻转到p_2
  74. public void actionPerformed(ActionEvent e) {
  75. card.show(pane, "p2");
  76. }
  77. });
  78. b_3.addActionListener(new ActionListener() { // 直接翻转到p_3
  79. public void actionPerformed(ActionEvent e) {
  80. card.show(pane, "p3");
  81. }
  82. });
  83. this.getContentPane().add(pane);
  84. this.getContentPane().add(p, BorderLayout.SOUTH);
  85. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  86. this.setSize(300, 200);
  87. this.setVisible(true);
  88. }
  89. public static void main(String[] args) {
  90. new TestMain();
  91. }
  92. }
复制代码

注意:当利用方法 next() 或 previous() 显示卡片时,将循环显示所有卡片。例如,如果当前显示的是最后一个卡片,再调用方法 next() 将显示第一个卡片;如果当前显示的是第一个卡片,再调用方法 previous() 将显示最后一个卡片。

希望本文对大家java程序设计有所帮助,同时,也请大家继续关注程序员之家!



回复

使用道具 举报