一、流布局FlowLayout
默认地,自左向右逐个排列
当一行排满时,自动排到下一行
setPreferredSize():控制每个控件的显示高度和宽度
案例效果

MyFrame.java
packageswing布局;import javax.swing.*;import java.awt.*;public class MyFrame extendsJFrame {publicMyFrame(String title){super(title);
Container contentPane=getContentPane();//这里的参数设置的是对齐方式FlowLayout.LEFT左对齐
LayoutManager layout=newFlowLayout(FlowLayout.LEFT);
contentPane.setLayout(layout);
JLabel a1=new ColorfulLabel(“1”,Color.YELLOW);
JLabel a2=new ColorfulLabel(“2”,Color.GREEN);
JLabel a3=new ColorfulLabel(“3”,Color.LIGHT_GRAY);
JLabel a4=new ColorfulLabel(“4”,Color.CYAN);
JLabel a5=new ColorfulLabel(“5”,Color.WHITE);
contentPane.add(a1);
contentPane.add(a2);
contentPane.add(a3);
contentPane.add(a4);
contentPane.add(a5);//设置宽和高
a4.setPreferredSize(new Dimension(150,30));
}private static class ColorfulLabel extendsJLabel{publicColorfulLabel(String text,Color bgColor){super(text);
setOpaque(true);
setBackground(bgColor);
setPreferredSize(new Dimension(60,30));
setHorizontalAlignment(SwingConstants.CENTER);
}
}
}
SwingDemo.java
packageswing布局;import javax.swing.*;public classSwingDemo {private static voidCreateGUI(){
JFrame frame=new MyFrame(“流布局”);
frame.setSize(400,300);
frame.setVisible(true);
}public static voidmain(String[] args) {
SwingUtilities.invokeLater(newRunnable() {
@Overridepublic voidrun() {
CreateGUI();
}
});
}
}
二、边界布局BorderLayout
把容器分为上、下、左、右、中五个区域
setPreferredSize()
对于上下边界,可以调整高度
对于左右边界,可以调整宽度
运行结果

MyFrame2.java
packageswing布局;import javax.swing.*;import java.awt.*;public class MyFrame2 extendsJFrame {publicMyFrame2(String title){super(title);
Container contentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
JLabel a1=new ColorfulLabel(“1”,Color.YELLOW);
JLabel a2=new ColorfulLabel(“2”,Color.GREEN);
JLabel a3=new ColorfulLabel(“3”,Color.LIGHT_GRAY);
JLabel a4=new ColorfulLabel(“4”,Color.CYAN);
JLabel a5=new ColorfulLabel(“5”,Color.WHITE);//五个区域
contentPane.add(a1,BorderLayout.PAGE_START);
contentPane.add(a2,BorderLayout.PAGE_END);
contentPane.add(a3,BorderLayout.LINE_START);
contentPane.add(a4,BorderLayout.LINE_END);
contentPane.add(a5,BorderLayout.CENTER);//设置宽和高
a1.setPreferredSize(new Dimension(0,80));
a3.setPreferredSize(new Dimension(100,0));
}private static class ColorfulLabel extendsJLabel{publicColorfulLabel(String text,Color bgColor){super(text);
setOpaque(true);
setBackground(bgColor);
setPreferredSize(new Dimension(60,30));
setHorizontalAlignment(SwingConstants.CENTER);
}
}
}
SwingDemo02.java
packageswing布局;import javax.swing.*;public classSwingDemo02 {private static voidCreateGUI(){
JFrame frame=new MyFrame2(“边界布局”);
frame.setSize(400,300);
frame.setVisible(true);
}public static voidmain(String[] args) {
SwingUtilities.invokeLater(newRunnable() {
@Overridepublic voidrun() {
CreateGUI();
}
});
}
}
三、卡片布局CardLayout
运行结果



通过切换下拉框的内容切换卡片
MyFrame3.java
packageswing布局;import javax.swing.*;import java.awt.*;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;public class MyFrame3 extendsJFrame {
JPanel cards=newJPanel();
JComboBox options=new JComboBox<>();publicMyFrame3(String title){super(title);//内容面板
Container contentPane=getContentPane();
contentPane.setLayout(newBorderLayout());//向下拉框列表添加内容
options.addItem(“第一个面板”);
options.addItem(“第二个面板”);//将下拉框添加至边界布局的顶部
contentPane.add(options,BorderLayout.PAGE_START);//将卡片布局添加至边界布局的center
contentPane.add(cards,BorderLayout.CENTER);//创建第一个面板
JPanel p1=newJPanel();
p1.add(new JButton(“红”));
p1.add(new JButton(“绿”));
p1.add(new JButton(“蓝”));//创建第二个面板
JPanel p2=newJPanel();
p2.add(new JLabel(“输入”));
p2.add(new JTextField(20));//将这两个面板添加到卡片布局中,其中的第二个参数为布局的名称,方便调用
cards.setLayout(newCardLayout());
cards.add(p1,”buttons”);
cards.add(p2,”text”);//添加事件响应
options.addItemListener(newItemListener() {
@Overridepublic voiditemStateChanged(ItemEvent e) {
ItemChange();
}
});
}private voidItemChange() {
CardLayout cardLayout=(CardLayout)cards.getLayout();int index=options.getSelectedIndex();
System.out.println(index);if (index==0){
cardLayout.show(cards,”buttons”);
}else if(index==1){
cardLayout.show(cards,”text”);
}
}
}
SwingDemo03.java
packageswing布局;import javax.swing.*;public classSwingDemo03 {private static voidCreateGUI(){
JFrame frame=new MyFrame3(“卡片布局”);
frame.setSize(400,300);
frame.setVisible(true);
}public static voidmain(String[] args) {
SwingUtilities.invokeLater(newRunnable() {
@Overridepublic voidrun() {
CreateGUI();
}
});
}
}
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208782.html原文链接:https://javaforall.net
