Swing入门代码示例

1.Swing的特点
原来的AWT组件来自于java.awt包,在不同的开发平台上显示的时候会表现出不同的风格,但是Swing开发的程序可以同一组件的风格,不依赖操作系统。

Swing是完全由Java编写,是轻量级组件,不依赖操作系统

2.流动布局管理器

package com.Adder;
 
import javax.swing.*;
import java.awt.*;
 
public class Flow_Layout  extends JFrame {
 
    public Flow_Layout(){
        setBounds(500,500,500,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setTitle("浮动布局管理器窗体");
        Container container=getContentPane();
        container.setLayout(new FlowLayout(FlowLayout.LEFT));//给容器设置流布局管理器,流布局默认的是居中对齐,
        // 可以用参数LEFT\CENTER\RIGHT参数修改布局
 
        for (int i=0;i<10;i++){
            container.add(new JButton("按钮"+i));
            System.out.println("按钮");
        }
 
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new Flow_Layout();
    }
}

3.边界布局管理器

package com.Adder;
 
import javax.swing.*;
import java.awt.*;
 
/*
 *边界布局将容器分为东西南北中五个部分
 * 注意:
 * 1.添加组件的时候要指定区域,否则默认添加在center区
 * 2.同一区域的组件会相互覆盖
 *3.改变窗体的大小,窗体中的按钮的大小随之改变,布满整个窗体
 * */
public class Border_Layout extends JFrame {
 
    public Border_Layout(){
        this.setBounds(500,500,500,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
        Container container=getContentPane();
        container.setLayout(new BorderLayout());
 
        JButton button1=new JButton("按钮1"),
                button2=new JButton("按钮2"),
                button3=new JButton("按钮3");
        button1.setBounds(100,100,100,100);
        container.add(button1,BorderLayout.CENTER);//设置按钮额度布局为中部布局
        container.add(button2,BorderLayout.EAST);
        container.add(button3,BorderLayout.WEST);
 
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new Border_Layout();
    }
}

4.网格布局管理器

package com.Adder;
 
 
import javax.swing.*;
import java.awt.*;
 
/*
* 两种构造方式:1.new GridLayout(列、行);2.new GirdLayout(列,行,水平间距,垂直间距)
*组件的大小随窗体大小改变
* 如果网格数小于组件数,就会自动优化布局,将列扩大
* */
public class Grid_Layout  extends JFrame {
    public Grid_Layout(){
        this.setBounds(500,500,500,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Container container=getContentPane();
        container.setLayout(new GridLayout(7,3,5,5));//设置为网格布局,7行3列,水平间距5像素,垂直间距5像素
 
        for (int i=0;i<20;i++){
            container.add(new JButton("按钮"+i));
        }
 
 
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new Grid_Layout();
    }
}

5.网格组布局管理器

GridBagConstraints常用属性:
在这里插入图片描述

package com.Adder;
import javax.swing.*;
import java.awt.*;
/*
 * 1.网格布局管理器中的组件只能放在网格中
 * 2.网格组布局管理器,组件摆放比较灵活,但是代码量比较大
 *
 * 使用网格组布局的方法
 * 1.创建对象网格组布局
 * 2.容器对象采用网格组布局G
 * 3.创建组件的约束对象
 * 4.将组件的约束对象添加到容器中
 * 网格组布局存在一个抽象的网格,网格上的行与列都有对应的编号,
 * */
public class GridBdg_Layout {
    JFrame jFrame = new JFrame();//主窗体
    Container container;//主容器
 
    public void createFrame() {
        jFrame.setSize(800, 800);//设置窗体大小
        jFrame.setLocationRelativeTo(null);//设置窗体在屏幕居中显示
 
        container = jFrame.getContentPane();//获取容器
        container.setLayout(new GridBagLayout());//获取窗体容器,设置网格组布局管理器
 
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭方式
    }
 
    public void init() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        g1.gridx = 0;//设置在网格的第一行第一列
        g1.gridy = 0;
        container.add(new JButton("组件1"), g1);
 
        GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
        g2.gridx = 1;//设置在网格的第2行第2列
        g2.gridy = 1;
        container.add(new JButton("组件2"), g2);
 
        GridBagConstraints g3 = new GridBagConstraints();//创建约束条件的类
        g3.gridx = 2;//设置在网格的第3行第3列
        g3.gridy = 2;
        container.add(new JButton("组件3"), g3);
        /*
         * 注意:如果从第三行第三列直接到第五行第五列,第四行第四列由于没有组件,第五行第五列的组件会填充到第四行第四列
         * */
    }
 
    public void createButton() {
        for (int i = 0; i < 10; i++) {
            GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
            g1.gridx = i;//设置在网格的第3行第3列
            g1.gridy = 0;
            container.add(new JButton("组件x"), g1);
 
            GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
            g2.gridx = 0;//设置在网格的第3行第3列
            g2.gridy = i;
            container.add(new JButton("组件y"), g2);
        }
    }
 
    public void init1() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        container.add(new JButton("组件1"), g1);
        g1.gridx = 1;//设置在网格的第一行第一列
        g1.gridy = 1;
        container.add(new JButton("组件1"), g1);
 
        GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
        g2.gridx = 2;//设置组件在在网格中的位置是的第2行第2列
        g2.gridy = 2;
        g2.gridwidth = 2;//设置组件在网格中占几行几列
        g2.gridheight = 1;
        container.add(new JButton("组件2"), g2);
 
        GridBagConstraints g3 = new GridBagConstraints();//创建约束条件的类
        g3.gridx = 4;//设置在网格的第3行第3列
        g3.gridy = 3;
        g3.gridwidth = 2;
        g3.gridheight = 2;
        container.add(new JButton("组件3"), g3);
    }
 
    public void init2() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        container.add(new JButton("组件1"), g1);
        g1.gridx = 1;//设置在网格的第一行第一列
        g1.gridy = 1;
        container.add(new JButton("组件1"), g1);
 
        GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
        g2.gridx = 2;//设置组件在在网格中的位置是的第2行第2列
        g2.gridy = 1;
        g2.gridwidth = 2;//设置组件在网格中占几行几列
        g2.gridheight = 2;
        g2.fill = GridBagConstraints.HORIZONTAL;
        container.add(new JButton("组件2 HORIZONAL"), g2);
 
        GridBagConstraints g3 = new GridBagConstraints();//创建约束条件的类
        g3.gridx = 5;//设置在网格的第3行第3列
        g3.gridy = 1;
        g3.gridwidth = 2;
        g3.gridheight = 2;
        g3.fill = GridBagConstraints.VERTICAL;
        container.add(new JButton("组件3 VERTIAL"), g3);
 
 
        GridBagConstraints g4 = new GridBagConstraints();//创建约束条件的类
        g4.gridx = 8;//设置在网格的第3行第3列
        g4.gridy = 1;
        g4.gridwidth = 2;
        g4.gridheight = 2;
        g4.fill = GridBagConstraints.BOTH;
        container.add(new JButton("组件3 BOTH"), g4);
    }
 
    public void init3() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        /*container.add(new JButton("组件1"),g1);*/
        g1.gridx = 1;//设置在网格的第一行第一列
        g1.gridy = 1;
        g1.gridwidth = 2;//设置组件在网格中占几行几列
        g1.gridheight = 2;
        g1.anchor = GridBagConstraints.NORTH;//设置组件所在的方位为北
        container.add(new JButton("组件1"), g1);
 
        g1.fill = GridBagConstraints.BOTH;//填充方式为全部填充
        JPanel jp = new JPanel();
        jp.setBackground(Color.green);
        container.add(jp, g1);
 
 
        GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
        g2.gridx = 3;//设置组件在在网格中的位置是的第2行第2列
        g2.gridy = 1;
        g2.gridwidth = 2;//设置组件在网格中占几行几列
        g2.gridheight = 2;
        g2.anchor = GridBagConstraints.SOUTH;//设置组件所在的方位为南
        g2.fill = GridBagConstraints.HORIZONTAL;//左右填充
        container.add(new JButton("组件2"), g2);
 
        g2.fill = GridBagConstraints.BOTH;//填充方式为全部填充
        /*g2.anchor=GridBagConstraints.HORIZONTAL;*/
        JPanel jp2 = new JPanel();
        jp2.setBackground(Color.red);
        container.add(jp2, g2);
 
        GridBagConstraints g3 = new GridBagConstraints();//创建约束条件的类
        g3.gridx = 5;//设置在网格的第3行第3列
        g3.gridy = 1;
        g3.gridwidth = 2;
        g3.gridheight = 2;
        g3.fill = GridBagConstraints.VERTICAL;//上下填充
        container.add(new JButton("组件3"), g3);
 
        g3.fill = GridBagConstraints.BOTH;
        JPanel jp3 = new JPanel();
        jp3.setBackground(Color.BLUE);
        container.add(jp3, g3);
    }
 
    /*
     * 可以使用inserts属性来自定义组件在单元格中的位置
     *inserts是一个类,使用四个值来设置组件在单元格中的属性,这四个值是inserts构造方法的四个参数
     * inserts(top,left,bottom,right),四个参数的单位是像素,类型为int
     * */
    public void init5() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        /*container.add(new JButton("组件1"),g1);*/
        g1.gridx = 1;//设置在网格的第一行第一列
        g1.gridy = 1;
        /*g1.gridwidth=2;//设置组件在网格中占几行几列
        g1.gridheight=2;*/
        g1.insets = new Insets(10, 5, 10, 10);
 
        container.add(new JButton("组件1"), g1);
    }
 
    /*
     * ipadx和ipady属性定义组件的首选大小
     * */
    public void init6() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        /*container.add(new JButton("组件1"),g1);*/
        g1.gridx = 1;//设置在网格的第一行第一列
        g1.gridy = 1;
        g1.ipadx = 10;
        g1.ipady = 10;
        g1.gridwidth = 2;//设置组件在网格中占几行几列
        g1.gridheight = 2;
        g1.insets = new Insets(10, 5, 10, 10);
        container.add(new JButton("组件1"), g1);
 
        g1.fill = GridBagConstraints.BOTH;//填充方式为全部填充
        JPanel jp = new JPanel();
        jp.setBackground(Color.green);
        container.add(jp, g1);
 
 
        GridBagConstraints g2 = new GridBagConstraints();//创建约束条件的类
        /*container.add(new JButton("组件1"),g1);*/
        g2.gridx = 3;//设置在网格的第一行第一列
        g2.gridy = 1;
        g2.ipadx = -5;
        g2.ipady = -5;
        g2.gridwidth = 2;//设置组件在网格中占几行几列
        g2.gridheight = 2;
        g2.insets = new Insets(10, 5, 10, 10);
        container.add(new JButton("组件1"), g2);
 
        g2.fill = GridBagConstraints.BOTH;//填充方式为全部填充
        /*g2.anchor=GridBagConstraints.HORIZONTAL;*/
        JPanel jp2 = new JPanel();
        jp2.setBackground(Color.red);
        container.add(jp2, g2);
    }
 
    /*
     * weightx和weighty,设置一个单元个的最大宽和高
     * 默认情况下,一个组件如果正好填满一个单元格,但是当拉大窗体的时候,单元格会变大,但是组件并不会变大
     * 当设置了weightx和weighty之后,组件的大小就会随着单元格的大小的改变而改变
     * */
    public void init7() {
        GridBagConstraints g1 = new GridBagConstraints();//创建约束条件的类
        g1.gridx = 1;
        g1.gridy = 1;
        g1.weightx=2;
        g1.weighty=2;
        container.add(new JButton("组件1"), g1);
    }
 
 
    public static void main(String[] args) {
        GridBdg_Layout bdg_layout = new GridBdg_Layout();
        bdg_layout.createFrame();
        bdg_layout.createButton();
        bdg_layout.init7();
        bdg_layout.jFrame.setVisible(true);
    }
}

6.下拉列表

package com.Adder;
 
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
/*
* 下拉框
* */
public class JCombo_Box extends JFrame {
 
    public JCombo_Box(){
        this.setBounds(500,400,500,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
        Container container=this.getContentPane();//获取容器
        container.setLayout(null);//设置绝对布局
 
        /*JComboBox可以保存泛型
        * 如添加String表示下拉列表中的元素都是字符串
        * */
       /* JComboBox<String> comboBox=new JComboBox<>();
       *//* comboBox.addItem("身份证");
        comboBox.addItem("学生证");
        comboBox.addItem("军人证");*/
 
        /*
        * 第二种方式创建下拉列表->构架一个字符串数组,并将这个字符串数组当作参数传入下拉框
        * */
        /*String[] items = {"数组元素1", "数组元素1", "数组元素1"};
        JComboBox<String> comboBox=new JComboBox<>(items);*/
 
        /*
        * 第三种创建架下拉列表的方法,实现一个下拉列表模型接口
        * ComboBoxModel是一个接口
        * */
        String[] items = {"数组元素1", "数组元素2", "数组元素3"};
        JComboBox<String> comboBox=new JComboBox<>();
        ComboBoxModel<String> comboBoxModel=new DefaultComboBoxModel<>(items);//床架一个下拉列表的模型
        comboBox.setModel(comboBoxModel);//向列表中添加数据模型
 
        /*获取选中的值*/
        JButton button=new JButton("打印");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("选中的元素的索引:"+comboBox.getSelectedIndex());//获取选中的索引
                System.out.println("选中的元素的值:"+comboBox.getSelectedItem());//获取选中的元素的值
            }
        });
        button.setBounds(240,20,70,30);//设置按钮的位置和大小
        container.add(button);
        comboBox.setEditable(true);//设置下拉框中的内容是否可以编辑
        comboBox.setBounds(20,20,200,30);//设置下拉列表的坐标和大小
        container.add(comboBox);//将下拉列表添加到容器中
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new JCombo_Box();
    }
}

7.列表框

/*
 * 列表框
 * */
public class J_list extends JFrame {
    public J_list() {
        this.setBounds(500, 500, 500, 500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
        Container container = this.getContentPane();
        container.setLayout(null);
 
        String[] items1 = {"元素1", "元素1", "元素1", "元素1", "元素1", "元素1", "元素1"};
 
 
        DefaultListModel<String> dlm = new DefaultListModel<>();//创建列表框数据模型
        for (String temp : items1) {
            dlm.addElement(temp);//向数据模型中添加元素
        }
 
        dlm.addElement("新元素");//数据模型调用addElement方法就可以在数据模型中添加新的元素
        JList<String> jl = new JList<>();
        jl.setModel(dlm);
 
        /*
         * SINGLE_SELECTION:单选
         * SINGLE_INTERVAL_SELECTION:只能连续选择相邻的元素
         * MULTIPLE_INTERVAL_SELECTION:不限定选择模式
         * */
        jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//设置选择模式
 
        JScrollPane jsp = new JScrollPane(jl);//创建滚动面板,向滚动面板中添加列表框
        jsp.setBounds(10, 10, 100, 300);//设置滚动面板的坐标和大小
        container.add(jsp);//将滚动面板添加到容器中
 
        /*获取列表框中选中的数据*/
        JButton button = new JButton("确认");
        button.setBounds(130, 10, 80, 50);
        button.addActionListener(new ActionListener() {//为按钮添加时间监听
            public void actionPerformed(ActionEvent e) {
                List<String> list = jl.getSelectedValuesList();
                for (String temp : list) {
                    System.out.println("选中的数据:"+temp);
                }
                System.out.println("-----end--------");
            }
        });
 
        container.add(button);
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new J_list();
    }
}

8.文本框组件

package com.Adder;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JText_Field extends JFrame {
    public JText_Field(){
        this.setBounds(500,500,500,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
        Container container=this.getContentPane();
        container.setLayout(new FlowLayout());
 
        JTextField textField =new JTextField();
        textField.setColumns(20);//设置文本框的长度,长度为20个字符
        textField.setText("初始值1");//设置文本
        textField.setFont(new Font("楷体",Font.PLAIN,20));//设置字体格式:字体为楷体、字体的样式为普通样式、字号为20
 
        container.add(textField);
 
 
        JButton button=new JButton("获取文本框中的内容");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("文本框中的内容为: "+textField.getText());//获取文本框中的内容
                textField.setText("");//清空文本框中的内容
                textField.requestFocus();//获取焦点(光标)
            }
        });
 
        container.add(button);
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new JText_Field();
    }
}

9.密码框组件

package com.Adder;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JPassword_field extends JFrame {
    public JPassword_field(){
        this.setBounds(200,200,500,500);
 
        Container container=this.getContentPane();
        container.setLayout(new FlowLayout());
 
        JPasswordField passwordField=new JPasswordField();
        passwordField.setColumns(20);//设置密码框可以显示20个字符
        //passwordField.setFont(new Font("密码",Font.BOLD,18));//设置字体
        passwordField.setEchoChar('#');//设置回显字符
 
        passwordField.addActionListener(new ActionListener() {//单击回车,获取密码
            public void actionPerformed(ActionEvent e) {
                char[] password=passwordField.getPassword();
                String str=new String(password);
                System.out.println(str);
            }
        });
 
        container.add(passwordField);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new JPassword_field();
    }
}

10.文本域组件

package com.Adder;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JText_Area extends JFrame {
    public JText_Area(){
        this.setBounds(200,200,500,500);
 
        Container container=this.getContentPane();
        container.setLayout(new FlowLayout());
 
        JTextArea area =new JTextArea();//获取文本域对象
        area.setRows(5);//设置文本域行数(宽)
        area.setColumns(10);//设置文本域列数(长)
        area.setFont(new Font("楷体",Font.PLAIN,20));//设置文本域中文字的格式
        area.setText("文本域初始文本内容");
 
        JButton button=new JButton("文本框内容");
        button.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent e) {//获取文本域中的内容
                System.out.println("文本域中的内容: "+area.getText());
            }
        });
 
        container.add(button);
        JScrollPane jsp=new JScrollPane(area);//给文本域添加滚动条
        container.add(jsp);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);
 
    }
 
    public static void main(String[] args) {
        new JText_Area();
    }
}
发布了27 篇原创文章 · 获赞 31 · 访问量 7479

猜你喜欢

转载自blog.csdn.net/weixin_43562234/article/details/94493348