📜  Swing示例-布局(1)

📅  最后修改于: 2023-12-03 15:05:26.736000             🧑  作者: Mango

Swing示例-布局

Swing是一种GUI工具包,它使程序员能够创建Java应用程序中的可视化用户界面。本示例介绍了几种常见的布局方式,可以帮助你更轻松地创建具有吸引力和易于使用的用户界面。

Border布局

Border布局将容器分成五个区域:北、南、东、西和中间。你可以在每个区域中添加组件,这些组件将根据其位置进行布局。通常,放置在中间区域的组件会自动调整大小以填充可用空间。

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class BorderExample extends JFrame {

    public BorderExample() {
        setTitle("BorderLayout Example");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setLayout(new BorderLayout());
        
        add(new JButton("North"), BorderLayout.NORTH);
        add(new JButton("South"), BorderLayout.SOUTH);
        add(new JButton("East"), BorderLayout.EAST);
        add(new JButton("West"), BorderLayout.WEST);
        add(new JButton("Center"), BorderLayout.CENTER);
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new BorderExample();
    }
}

以上代码会生成一个具有Border布局的JFrame,包括一个位于中心的按钮以及沿边缘的其他按钮。

Flow布局

Flow布局将组件根据它们的添加顺序从左到右排成一行。如果需要,它会在下一行中继续排列组件。默认情况下,组件是左对齐的,但你可以使用FlowLayout.RIGHTFlowLayout.CENTER来使它们右对齐或居中。

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowExample extends JFrame {

    public FlowExample() {
        setTitle("FlowLayout Example");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setLayout(new FlowLayout());
        
        add(new JButton("Button 1"));
        add(new JButton("Button 2"));
        add(new JButton("Button 3"));
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new FlowExample();
    }
}

以上代码会生成一个具有Flow布局的JFrame,其中包括三个排列成一行的按钮。

Grid布局

Grid布局将组件放置在一个网格中,类似于电子表格。你可以通过指定行数和列数来创建网格,也可以让控件自适应父容器的大小。此外,你也可以指定每个单元格的行高和列宽。

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GridExample extends JFrame {

    public GridExample() {
        setTitle("GridLayout Example");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setLayout(new GridLayout(2, 2));
        
        add(new JButton("Button 1"));
        add(new JButton("Button 2"));
        add(new JButton("Button 3"));
        add(new JButton("Button 4"));
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new GridExample();
    }
}

以上代码会生成一个具有Grid布局的JFrame,其中包括四个放置在一个2x2网格中的按钮。

Box布局

Box布局通过添加水平或垂直Box容器来控制组件的布局。Box水平容器将组件排列成一行,而Box垂直容器将组件排列成一列。此外,你还可以使用Box.createHorizontalGlue()Box.createVerticalGlue()添加弹性空间。

import java.awt.Box;
import javax.swing.JButton;
import javax.swing.JFrame;

public class BoxExample extends JFrame {

    public BoxExample() {
        setTitle("Box Example");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        Box vbox = Box.createVerticalBox();
        add(vbox);
        
        vbox.add(new JButton("Button 1"));
        vbox.add(new JButton("Button 2"));
        vbox.add(Box.createVerticalGlue());
        vbox.add(new JButton("Button 3"));
        vbox.add(Box.createVerticalStrut(5));
        vbox.add(new JButton("Button 4"));
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new BoxExample();
    }
}

以上代码会生成一个具有Box布局的JFrame,其中包括四个垂直排列的按钮和一个具有弹性空间和垂直填充的Box容器。

Card布局

Card布局将组件放置在一个单独的卡片上,只显示其中一个卡片。你可以使用卡片的名称来切换可见的卡片。

import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CardExample extends JFrame {

    public CardExample() {
        setTitle("CardLayout Example");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel cards = new JPanel(new CardLayout());
        add(cards);
        
        cards.add(new JButton("Card 1"), "1");
        cards.add(new JButton("Card 2"), "2");
        cards.add(new JButton("Card 3"), "3");
        
        CardLayout cardLayout = (CardLayout) cards.getLayout();
        cardLayout.show(cards, "1");
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new CardExample();
    }
}

以上代码会生成一个具有Card布局的JFrame,其中包括三个按钮,只显示第一个按钮。

以上这些示例仅是Swing布局的基础知识,当然还有其他更复杂的布局方式,你可以通过参考Java官方文档和其他学习资料来学习更多Swing布局的用法。