4 流布局 FlowLayout & 边界布局 BorderLayout & 卡片布局 CardLayout

流布局 FlowLayout

流布局 FlowLayout:

  • 默认地,自左向右逐个排列
  • 当一行排满时,自动排到下一行
  • setPreferredSize(); //设置每个控件的尺寸,这个方法继承自JComponent

可以选择居左、居右、居中对齐:

  • new FlowLayout(FlowLayout.LEFT);
  • new FlowLayout(FlowLayout.RIGHT);
  • new FlowLayout(FlowLayout.CENTER);

边界布局 BorderLayout

边界布局 BorderLayout,把容器分为上、下、左、右、中五个区域。

setPreferredSize():

  • 对于上下边界,可以调整高度
  • 对于左右边界,可以调整宽度

卡片布局 CardLayout

卡片布局 CardLayout
卡片布局:犹如多张叠在一起的卡片,每次只显示一张卡片的内容
CardLayout的使用:

pane.setLayout(new CardLayout());
pane.add(c1, "name1");
pane.add(c2, "name2");

在添加控件时,关联一个 string 作为名字,便于后面的控制:
例如,cardLayout.show(pane, “name1”);

代码:

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

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Demo{
	
	public static void main(String[] args) {
		MyFrame frame = new MyFrame("Demo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(300, 300);
		frame.setVisible(true);
	}
}

class MyFrame extends JFrame{
	JComboBox<String> jcb = new JComboBox<>();
	JPanel panel = new JPanel();
	
	public MyFrame(String title) {
		super(title);
		
		Container contentPane = this.getContentPane();
		contentPane.setLayout(new BorderLayout());
		contentPane.add(jcb, BorderLayout.NORTH);
		contentPane.add(panel, BorderLayout.CENTER);
		
		jcb.addItem("第一个面板");
		jcb.addItem("第二个面板");
		
		panel.setLayout(new CardLayout());
		
		JPanel buttonPanel = new JPanel();
		buttonPanel.setLayout(new FlowLayout());
		buttonPanel.add(new JButton("红色"));
		buttonPanel.add(new JButton("蓝色"));
		buttonPanel.add(new JButton("绿色"));
		
		JPanel textPanel = new JPanel();
		textPanel.setLayout(new FlowLayout());
		textPanel.add(new JLabel("请输入:"));
		textPanel.add(new JTextField(10));
		
		panel.add(buttonPanel, "button");
		panel.add(textPanel, "text");
		
		jcb.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				panelChange();
			}
			
		});
		
		panelChange();
	}
	
	public void panelChange() {
		CardLayout cardLayout = (CardLayout)panel.getLayout();
		if("第一个面板".equals(jcb.getSelectedItem())) {
			cardLayout.show(panel, "button");
		}else {
			cardLayout.show(panel, "text");
		}
	}
}

输出:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值