流布局 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");
}
}
}
输出: