Java-Swing入门到入土

Java 从入门到入土 -Swing

    • 1.1 Swing特点
    • 1.2 Swing包
    • 1.3 Swing常用组件
    • 2.1 JFrame 窗体
    • 2.2 JDialog 对话框
    • 3.1 JLabel 标签的使用
    • P713.3.2 图标的使用
    • 4.1 绝对布局
    • 4.2 流布局管理器
        • FlowLayout
    • 4.3 边界布局管理
    • 网格布局管理器
    • 4.5 网格组件管理器

1.1 Swing特点

Java-Swing入门到入土_第1张图片
在这里插入图片描述

1.2 Swing包

Java-Swing入门到入土_第2张图片

1.3 Swing常用组件

Java-Swing入门到入土_第3张图片
Java-Swing入门到入土_第4张图片
Java-Swing入门到入土_第5张图片

2.1 JFrame 窗体

示例
Java-Swing入门到入土_第6张图片

窗体创建代码 java:

public class Demo_JFrame {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("窗体主题");
        jFrame.setVisible(true);//窗体可见
        /**
         * DO_NOTHING_ON_CLOSE = 0 : 无任何操作
         * HIDE_ON_CLOSE = 1 :隐藏窗口,不关闭程序
         * DISPOSE_ON_CLOSE = 2:关闭并释放窗体资源
         * EXIT_ON_CLOSE = 3:隐藏窗体,并停止程序
         */
        jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//        jFrame.setSize(300, 200);//设置窗体大小,单位 像素
//        jFrame.setLocation(200, 300);//设置坐标,单位 像素
        jFrame.setBounds(200, 200, 300, 300);//设置坐标和窗体大小,单位 像素

        Container contentPane = jFrame.getContentPane();//获取窗体容器
        contentPane.setBackground(Color.WHITE);
        JLabel jLabel = new JLabel("这是一个窗体");
        contentPane.add(jLabel);//添加组件
//        contentPane.remove(jLabel);//删除组件
        contentPane.validate();//验证容器中的组件
        jFrame.setContentPane(contentPane);

        jFrame.setResizable(false);//设置窗口大小是否可变
        System.out.println("x=" + jFrame.getX() + "; y=" + jFrame.getY() + "; width=" + jFrame.getWidth()
                + "; height=" + jFrame.getHeight());
    }
}

项目中代码Java:

public class Demo_JFrame extends JFrame{
    public Demo_JFrame(){
//        JFrame jFrame = new JFrame("窗体主题");
        setTitle("窗体标题");//设置窗体标题
        setVisible(true);//窗体可见
        /**
         * DO_NOTHING_ON_CLOSE = 0 : 无任何操作
         * HIDE_ON_CLOSE = 1 :隐藏窗口,不关闭程序
         * DISPOSE_ON_CLOSE = 2:关闭并释放窗体资源
         * EXIT_ON_CLOSE = 3:隐藏窗体,并停止程序
         */
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//        jFrame.setSize(300, 200);//设置窗体大小,单位 像素
//        jFrame.setLocation(200, 300);//设置坐标,单位 像素
        setBounds(200, 200, 300, 300);//设置坐标和窗体大小,单位 像素

        Container contentPane = getContentPane();//获取窗体容器
        contentPane.setBackground(Color.WHITE);
        JLabel jLabel = new JLabel("这是一个窗体");
        contentPane.add(jLabel);//添加组件
//        contentPane.remove(jLabel);//删除组件
        contentPane.validate();//验证容器中的组件
        setContentPane(contentPane);

        setResizable(false);//设置窗口大小是否可变
        System.out.println("x=" + getX() + "; y=" + getY() + "; width=" + getWidth()
                + "; height=" + getHeight());
    }
    public static void main(String[] args) {
        new Demo_JFrame();
    }
}

2.2 JDialog 对话框

public class Demo_JDialog extends JDialog {
    public Demo_JDialog(JFrame frame){
        /**
         * 第一个参数,父窗体
         * 第二个参数,对话框标题
         * 第三个参数,是否阻塞父窗体
         */
        super(frame, "对话框标题", true);//设置对话框阻塞
        Container container = getContentPane();//获取窗口容器
        container.add(new JLabel("这是一个对话框"));
        setBounds(100, 150, 200, 150);//设置坐标和窗体大小
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("父窗体");
        f.setBounds(50, 50, 300, 300);
        Container contentPane = f.getContentPane();
        JButton button = new JButton("弹出对话框");
        contentPane.setLayout(new FlowLayout());//设置布局,使用流布局
        contentPane.add(button);
        f.setVisible(true);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        //按钮添加监听事件
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Demo_JDialog dialog = new Demo_JDialog(f);
                dialog.setVisible(true);//设置窗体可见
            }
        });
    }
}

Java-Swing入门到入土_第7张图片

3.1 JLabel 标签的使用

public class Demo_JLabel extends JFrame {
    public Demo_JLabel(){
        setBounds(100, 100, 200, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container contentPane = getContentPane();
        setVisible(true);

        JLabel label = new JLabel("这是一个标签内容");
//        label.setText("更改标签内容");
//        System.out.println(label.getText());//获取标签内容
        label.setFont(new Font("楷体", Font.BOLD, 15));
        label.setForeground(Color.RED);//更改字体颜色

        contentPane.add(label);
    }

    public static void main(String[] args) {
        new Demo_JLabel();
    }
}

Java-Swing入门到入土_第8张图片

P713.3.2 图标的使用

Java Swing 中图标只能用标签设置,没有专用的图标类。

public class Demo_Icon extends JFrame {
    public Demo_Icon(){
        setBounds(100, 100, 500, 350);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Container contentPane = getContentPane();

        JLabel label = new JLabel("这是一个展示图标的标签");
//        URL url = Demo_Icon.class.getResource("java.png");//获取图片URL路径
//        System.out.println(url);//D:\ProgramFiles\IdeaProjects\hello_Swing\src\com\icon\java.png
//        Icon icon = new ImageIcon("D:\\ProgramFiles\\IdeaProjects\\hello_Swing\\src\\com\\icon\\java.png");
        Icon icon = new ImageIcon("com/icon/java.png");//第二种方法,获取相应路径下的图片
        label.setIcon(icon);//添加图片
        label.setSize(20, 20);//设定标签大小,不会改变图片大小

        contentPane.add(label);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Demo_Icon();
    }
}

Java-Swing入门到入土_第9张图片

4.1 绝对布局

也叫做 null布局
使用绝对布局的窗口通常都是固定大小的,窗口内的组件的位置和形状不会随着窗体的改变而发生变化。

	Container contentPane = getContentPane();//获取窗体容器
	contentPane.setLayout(null); // 设置绝对布局

4.2 流布局管理器

FlowLayout

从左到右排序,默认居中对齐
像流水一样,像某个方向流动,遇到障碍就折回。
所有的组件会随着窗口大小而调整位置。

	Container contentPane = getContentPane();//获取窗体容器
    contentPane.setLayout(new FlowLayout()); //设置流布局,默认居中对齐
    for(int i = 0; i<10; i++){
        JButton b1 = new JButton("按钮"+ i+i+i+i);
        contentPane.add(b1);
    }
//contentPane.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局,左对齐
//contentPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); //设置流布局,右对齐
//contentPane.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));//居中对齐,设置组件间距20

Java-Swing入门到入土_第10张图片

4.3 边界布局管理

Java-Swing入门到入土_第11张图片
一个容器默认有 东、西、南、北、中 五个布局:
Java-Swing入门到入土_第12张图片
改变窗体大小,组件跟着改变。
在同一个区域添加组件,会覆盖原来的组件。
Java-Swing入门到入土_第13张图片

网格布局管理器

Java-Swing入门到入土_第14张图片
组件大小会随着窗口大小改变。
如果组件数量大于网格数量,会自动重新布局网格,增大网格布局。
Java-Swing入门到入土_第15张图片
Java-Swing入门到入土_第16张图片

4.5 网格组件管理器

你可能感兴趣的:(Java-Swing入门到入土)