10.4 使用布局管理器3(CardLayout)

3)CardLayout布局管理器

CardLayout布局管理器以时间而非空间来管理它里面的组件,它将加入容器的所有组件看成一叠卡片,每次只要最上面的那个Component才可见。就好像一副扑克牌,它们叠在一起,每次只有最上面的一张扑克牌可见。

CardLayout提供了如下两个构造器:

1)CardLayout():创建默认的CardLayout布局管理器。

2)CardLayout(int hgap,int vgap):通过指定卡片与容器左右边界的间距(hgap)、上下边界(vgap)的间距来创建CardLayout布局管理器。

CardLayout用于控制组件可见的5个常用方法:

1)first(Container target):显示target容器中的第一个卡片。

2)last(Container target):显示target容器中的最后一个卡片。

3)previous(Container target):显示target容器中前一个卡片。

4)next(Container target):显示target容器中下一个卡片。

5)show(Container target,String name):显示target容器中指定名字的卡片。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package  cardlayout.dolphin.awt;
 
import  java.awt.BorderLayout;
import  java.awt.Button;
import  java.awt.CardLayout;
import  java.awt.Frame;
import  java.awt.Panel;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;
 
public  class  CardLayoutTest {
 
     public  static  void  main(String[] args) {
         // TODO 自动生成的方法存根
         Frame f =  new  Frame(CardLayoutTest);
         String[] names = {第一张,第二张,第三张,第四张,第五张};
         final  CardLayout c =  new  CardLayout();
         final  Panel p1 =  new  Panel();
         p1.setLayout(c);
         for  ( int  i =  0 ; i < names.length; ++i)
         {
             p1.add(names[i],  new  Button(names[i]));
         }
         Panel p2 =  new  Panel();
         //控制显示上一张按钮
         Button btn_Pre =  new  Button(上一张);
         btn_Pre.addActionListener( new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 c.previous(p1);
             }
         });
         //控制显示下一张按钮
         Button btn_Next =  new  Button(下一张);
         btn_Next.addActionListener( new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 c.next(p1);
             }
         });
         //控制显示第一张按钮
         Button btn_First =  new  Button(第一张);
         btn_First.addActionListener( new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 c.first(p1);
             }
         });
         //控制显示最后一张按钮
         Button btn_Last =  new  Button(最后一张);
         btn_Last.addActionListener( new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 c.last(p1);
             }
         });
         //控制显示最后一张按钮
         Button btn_3rd =  new  Button(第三张);
         btn_3rd.addActionListener( new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 c.show(p1,第三张);
             }
         });
         p2.add(btn_Pre);
         p2.add(btn_Next);
         p2.add(btn_First);
         p2.add(btn_Last);
         p2.add(btn_3rd);
         f.add(p1);
         f.add(p2,BorderLayout.SOUTH);
         f.pack();
         f.setVisible( true );
     }
}

\

转载于:https://www.cnblogs.com/sxdxjava/p/5544839.html

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用CardLayout布局的简单小图片浏览器的代码示例: ```java import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class ImageBrowser extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JPanel imagePanel; // 显示图片的面板 private CardLayout cardLayout; // 卡片布局 private JButton prevButton; // 前一张按钮 private JButton nextButton; // 后一张按钮 private JLabel infoLabel; // 显示图片信息的标签 private File[] imageFiles; // 图片文件列表 private int currentIndex; // 当前显示的图片索引 public ImageBrowser(File[] imageFiles) { this.imageFiles = imageFiles; this.currentIndex = 0; // 初始化界面 initUI(); } private void initUI() { // 设置窗口标题和大小 setTitle("Image Browser"); setSize(new Dimension(600, 400)); // 创建面板和布局 JPanel controlPanel = new JPanel(); // 控制按钮面板 imagePanel = new JPanel(); // 显示图片面板 cardLayout = new CardLayout(); imagePanel.setLayout(cardLayout); // 添加图片面板到窗口的中心位置 add(imagePanel, BorderLayout.CENTER); // 添加控制按钮面板到窗口的南侧位置 add(controlPanel, BorderLayout.SOUTH); // 创建前一张按钮 prevButton = new JButton("Prev"); prevButton.addActionListener(this); controlPanel.add(prevButton); // 创建后一张按钮 nextButton = new JButton("Next"); nextButton.addActionListener(this); controlPanel.add(nextButton); // 创建图片信息标签 infoLabel = new JLabel(); infoLabel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); controlPanel.add(infoLabel); // 添加所有图片到图片面板 for (int i = 0; i < imageFiles.length; i++) { try { // 读取图片文件,创建图像并缩放至面板大小 Image image = ImageIO.read(imageFiles[i]); image = image.getScaledInstance(imagePanel.getWidth(), imagePanel.getHeight(), Image.SCALE_SMOOTH); // 创建并添加图片标签到图片面板 JLabel imageLabel = new JLabel(new ImageIcon(image)); imagePanel.add(imageLabel, "image" + i); } catch (IOException e) { e.printStackTrace(); } } // 更新显示图片信息 updateInfoLabel(); // 设置窗口居中显示和可见性 setLocationRelativeTo(null); setVisible(true); } private void updateInfoLabel() { // 更新显示图片信息标签 String info = String.format("%d/%d, %s", currentIndex + 1, imageFiles.length, imageFiles[currentIndex].getName()); infoLabel.setText(info); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == prevButton) { // 点击了前一张按钮 currentIndex = (currentIndex - 1 + imageFiles.length) % imageFiles.length; // 计算前一张图片的索引 cardLayout.previous(imagePanel); // 切换到前一张图片 updateInfoLabel(); // 更新显示图片信息 } else if (e.getSource() == nextButton) { // 点击了后一张按钮 currentIndex = (currentIndex + 1) % imageFiles.length; // 计算后一张图片的索引 cardLayout.next(imagePanel); // 切换到后一张图片 updateInfoLabel(); // 更新显示图片信息 } } public static void main(String[] args) { // 创建图片文件列表 File[] imageFiles = new File[4]; imageFiles[0] = new File("image1.jpg"); imageFiles[1] = new File("image2.jpg"); imageFiles[2] = new File("image3.jpg"); imageFiles[3] = new File("image4.jpg"); // 创建图片浏览器窗口 new ImageBrowser(imageFiles); } } ``` 在上述代码中,我们创建了一个`ImageBrowser`类,该类继承自`JFrame`类,并实现了`ActionListener`接口。在`ImageBrowser`类中,我们定义了以下成员变量: - `imagePanel`:用于显示图片的面板; - `cardLayout`:卡片布局,用于切换显示的图片; - `prevButton`:前一张按钮,用于向前切换显示的图片; - `nextButton`:后一张按钮,用于向后切换显示的图片; - `infoLabel`:用于显示当前图片信息的标签; - `imageFiles`:图片文件列表; - `currentIndex`:当前显示的图片索引。 在`initUI()`方法中,我们初始化了界面。首先创建了两个面板:`controlPanel`和`imagePanel`,并使用`BorderLayout`布局将`imagePanel`添加到窗口的中心位置,将`controlPanel`添加到窗口的南侧位置。 在`controlPanel`面板中,我们创建了两个按钮和一个标签,用于控制图片的显示和显示当前图片信息。在`imagePanel`面板中,我们使用`CardLayout`布局,将所有的图片添加到面板中,并为每个图片标签设置一个名称(例如`"image0"`、`"image1"`等),以便于之后通过名称来切换显示的图片。 在`updateInfoLabel()`方法中,我们更新显示图片信息的标签。根据当前显示的图片索引和图片列表,计算出当前图片的信息(例如`"1/4, image1.jpg"`),并将其设置为标签的文本。 在`actionPerformed()`方法中,我们处理前一张和后一张按钮的点击事件。如果点击了前一张按钮,我们计算出前一张图片的索引,并通过`CardLayout`布局的`previous()`方法来切换显示的图片;如果点击了后一张按钮,我们计算出后一张图片的索引,并通过`CardLayout`布局的`next()`方法来切换显示的图片。之后调用`updateInfoLabel()`方法来更新显示图片信息的标签。 在`main()`方法中,我们创建了一个包含4张图片的文件列表,并创建了一个`ImageBrowser`对象来显示这些图片。 注意,在实际开发中,我们应该将图片文件列表作为构造方法的参数传入`ImageBrowser`类中,而不是在`main()`方法中硬编码。这样可以使代码更加灵活和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值