CardLayout布局管理器允许向一个容器中添加多个组件,允许在同一位置添加并显示所有组件。不过任意时刻只有一个组件是可见的,通过调用
CardLayout中定义的first()、last()、next()和previous()方法指定显示哪个组件,显示顺序正如这些方法名一样。另
外还有show()方法用于指定显示某个组件,这时将不考虑容器中该组件与其他组件的关系。
CardLayout类可以说是Java中作用最小的布局管理器,用这个管理器,可以使得容器象一个卡片盒,而容器中的页面象卡片盒中的卡片一样任意翻动
显示。引入Swing之前,CardLayout用于创建选项卡用户界面,但Swing中的JTabbedPane提供了更好的实现机制,不过某些情况还
是会用到CardLayout,如制作Windows 风格的用户向导界面来依次显示一系列面板。
CardLayout布局管理器有以下构造函数:
CardLayout():创建一卡片布局管理器
CardLayout(int hgap, int vgap):创建一卡片布局管理器,并指定左右边距和上下边距。
下面用CardLayout写了一个小例子:
(注意测试环境是JDK1.6,其中透明属性是1.6之后才有,所以低于1.6不能运行,而使用的透明方法在JDK1.7中对此方法做了修改,所以1.7也会运行错误
,详见
)
主要用到BorderLay,FlowLayout来布局按钮和面板,图片采用的是CardLayout,然后几个按钮的监听事件也是调用CardLayout布局管理器中的一些方法。
源码:
package osc.test.cardlayout;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class CardTest extends JFrame {
public static final Image LOG = new ImageIcon(
CardTest.class.getResource("/images/LOG.png")).getImage();;
private CardLayout cardLayout;
private JPanel imagePanel;
private ImageLabel[] imageLabels;
private JPanel buttonPanel;
private JButton firstButton;
private JButton previousButton;
private JButton nextButton;
private JButton lasButton;
public CardTest() {
super("CardLayout Test --by Alog2012");
init();
}
private void init() {
Container container = getContentPane();
container.add(getImagePanel(), BorderLayout.CENTER);
container.add(getButtonPanel(), BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.95f);
pack();
// 获取系统工具箱
Toolkit kit = Toolkit.getDefaultToolkit();
int scrW = kit.getScreenSize().width;
int scrH = kit.getScreenSize().height;
int locale_x = (scrW - getSize().width) / 2;
int locale_y = (scrH - getSize().height) / 2;
super.setLocation(locale_x, locale_y);
super.setIconImage(LOG);
setVisible(true);
}
protected JPanel getImagePanel() {
imagePanel = new JPanel(cardLayout = new CardLayout());
setMinimumSize(new Dimension(240, 200));
setPreferredSize(new Dimension(540, 450));
setMaximumSize(new Dimension(720, 640));
imageLabels = getImageLabels();
for (int i = 0; i < 8; i++) {
imagePanel.add(imageLabels[i], String.valueOf(i));
}
return imagePanel;
}
protected ImageLabel[] getImageLabels() {
imageLabels = new ImageLabel[8];
for (int i = 0; i < 8; i++) {
Image image = new ImageIcon(
CardTest.class.getResource("/images/pic_" + i + ".jpg"))
.getImage();
imageLabels[i] = new ImageLabel(image);
}
return imageLabels;
}
protected JPanel getButtonPanel() {
buttonPanel = new JPanel();
buttonPanel.add(getFirstButton());
buttonPanel.add(getPreviousButton());
buttonPanel.add(getNextButton());
buttonPanel.add(getLasButton());
return buttonPanel;
}
protected JButton getFirstButton() {
firstButton = new JButton("首页");
firstButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.first(imagePanel);
}
});
return firstButton;
}
protected JButton getPreviousButton() {
previousButton = new JButton("向前");
previousButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.previous(imagePanel);
}
});
return previousButton;
}
protected JButton getNextButton() {
nextButton = new JButton("向后");
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.next(imagePanel);
}
});
return nextButton;
}
protected JButton getLasButton() {
lasButton = new JButton("末页");
lasButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardLayout.last(imagePanel);
}
});
return lasButton;
}
class ImageLabel extends JLabel {
private Image image;
public ImageLabel(Image image) {
this.image = image;
}
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, getSize().width, getSize().height, this);
}
}
public static void main(String[] args) {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
new CardTest();
}
}
参考:
1.《
Pro Java Programming(Second Edition)
》
2.《
Core Java I
》
分享到:
相关推荐
【标题】"第七个范例——布局之LayoutContainer"是一个关于软件开发中界面设计的讨论,特别是关注如何使用布局管理器来组织用户界面元素。在软件开发中,尤其是在图形用户界面(GUI)的设计中,LayoutContainer是...
#### 四、卡片布局——CardLayout **1. 基本概念** `CardLayout`允许在一个容器中放置多个组件,但每次只显示其中一个组件,类似于堆叠起来的卡片。这种方式非常适合实现多页面的应用程序。 **2. 构造方法** - `...
【标题】:“第九个范例——布局之StackContainer”指的是在软件开发中,特别是图形用户界面(GUI)设计中的一种布局管理方式。StackContainer是一种布局容器,它将组件按照栈的方式进行排列,就像堆叠的卡片一样。...
`swing-layout-1.0.jar`库文件提供了一个额外的布局管理器——`BoxLayout2`,它是对Java标准库中`BoxLayout`的增强。`BoxLayout2`允许开发者在容器的任意轴上进行布局,并且增加了更多的对齐选项和间距控制。此外,...
Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。每种布局管理器都有其特定的排列规则,开发者可以根据需要选择合适的布局。 事件处理是Swing应用程序中实现用户...
常见的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和BoxLayout等。例如,FlowLayout按顺序将组件水平或垂直排列;BorderLayout将容器分为五个区域:北、南、东、西和中心,每个区域只能放置一个...
Java 提供了多种布局管理器,如 BorderLayout、FlowLayout、GridLayout、CardLayout 和 GridBagLayout,每种都有特定的排列规则。通过合理利用布局管理器,开发者可以轻松地创建美观且适应性强的界面。 在 AWT 的...
CardLayout是最灵活的布局方案之一,选项d正确。 4. 异常处理: - 题目29展示了自定义异常的创建。当输入值大于10时,应该使用`throw new Exception("message")`语句抛出自定义异常,因此选项c正确。 5. 图像绘制...
Swing还支持布局管理器,如FlowLayout、BorderLayout、GridLayout和CardLayout,这些管理器帮助自动调整组件的位置和大小,以适应不同屏幕尺寸和分辨率。 描述中提到的“vc++串口通讯”,意味着这个Java Swing应用...
常见的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。理解并合理使用布局管理器是构建美观且响应良好的GUI的关键。 4. **事件处理**:Java GUI通过事件驱动模型进行交互。例如,...
JPanel默认使用流式布局管理器(FlowLayout),但也可以根据需要更换为其他的布局管理器,如GridLayout、BorderLayout或CardLayout等。 在给定的文件名列表中,我们可以推测这些Java源代码文件可能与创建一个基于...
3. **布局管理**:Eclipse VE支持多种布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout和CardLayout等。选择合适的布局管理器可以使界面在不同大小的屏幕上自适应。 4. **事件处理**:通过双击...
- GridBagLayout:这是一个复杂的布局管理器,可以创建复杂的格状布局,每个组件可以指定其在网格中的位置和跨度。 - CardLayout:允许在同一个容器中切换显示不同的组件,就像翻卡片一样。 ### Swing的Look and ...
11.1.3 卡片式布局——CardLayout 11.1.4 列布局——ColoumnLayout 11.1.5 锚点布局——AnchorLayout 11.1.6 自适应布局——FitLayout 11.1.7 ContainerLayout 11.2 与布局有关的其他知识 11.2.1 父类Ext....
另一方面,卡片布局(CardLayout)则是布局管理器的一种,它将容器视为一组卡片,每次只能显示一张卡片。在通讯录应用中,这种布局可能用于实现动态切换联系人信息,例如,用户可以通过搜索或选择列表中的联系人,...
11.1.3 卡片式布局——CardLayout 11.1.4 列布局——ColoumnLayout 11.1.5 锚点布局——AnchorLayout 11.1.6 自适应布局——FitLayout 11.1.7 ContainerLayout 11.2 与布局有关的其他知识 11.2.1 父类Ext....
Swing Layout Manager提供了一系列布局策略,如 FlowLayout、GridLayout、BorderLayout 和 CardLayout 等,使得开发者可以根据需求选择合适的布局来组织GUI元素。`swing-layout-1.0.jar`可能包含了自定义或增强的...
2. **布局管理器**: Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等,用于控制组件在容器中的排列方式。例如,FlowLayout按照顺序从左到右、从上到下放置组件;...
2. **布局管理器**:Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout。理解每种布局管理器的特点,能够根据需求选择合适的布局。 3. **事件处理**:学习如何添加...