Java-GUI设计

目录

1.概述

2.常用的窗体

2.1JFrame

2.2JDialog

3.常用的面板

3.1JPanel

4.常用的组件

4.1标签组件

4.2按钮

4.3单选按钮组件

4.4复选组件框

 4.5下拉列表框组件

 4.6菜单栏

 4.7文本组件

 4.8密码框组件

4.9文本域组件

 

5.常用的布局

5.1流布局FlowLayout

 5.2边界布局BorderLayout

5.3网格布局管理器

6.常用的事件监听器

 

7.项目登录界面搭建


1.概述

JavaSwing组件之间的继承关系图:

 各个组件的作用:

2.常用的窗体

2.1JFrame

JFrame是一个容器,他是各个组件的载体。

新建JFrame对象:

 设置JFrame的大小:

设定JFrame的关闭方式:

package com.pikaqiu.gui;

import javax.swing.*;

public class Demo1 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("hello"); //初始化一个窗口
//        jf.setSize(400,250); //设置窗口大小
//        jf.setLocation(400,300); //设置窗口出现的位置
        jf.setBounds(400,300,400,250); //设置窗口出现的位置和大小
        jf.setVisible(true); //显示窗口
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //默认关闭方式
    }
}

2.2JDialog

他是从一个窗体弹出来的另一个窗体,他和JFrame类似,需要调用getContentPane将窗体转换为容器,然后在容器中设置窗体内容。

注意:JDialog可以当成JFrame使用,但必须从属于JFrame

JDialog的构造函数:

package com.pikaqiu.gui;

import javax.swing.*;

public class Demo2 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("JFrame");
        jf.setBounds(400,300,400,280);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JDialog jd = new JDialog(jf,"Dialog");
        jd.setBounds(400,300,300,180);
        jd.setVisible(true);
        jd.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //JDialog常用的关闭窗口方式
    }
}

3.常用的面板

3.1JPanel

JPanel就是一种最简单的面板,继承自java.awt.Container类。

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo3 {
    public static void main(String[] args) {
        //设置一个窗口
        JFrame jf = new JFrame("Frame");
        jf.setBounds(400,300,1000,500);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //设置两个按钮
        JButton jb1 = new JButton("按钮一");
        JButton jb2 = new JButton("按钮二");

        //设置一个面板
        JPanel jp = new JPanel(new FlowLayout());

        //添加按钮
        jp.add(jb1);
        jp.add(jb2);

        //将面板添加入窗口中去
        jf.add(jp);
    }
}

3.2JScrollPane

JScrollPane是带滚动条的面板。因此,在碰到需要将一个大的组件放到一个较小的空间的时候,使用该面板。JScrollPane内只能添加一个组件;因此,如果需要将多个组件添加到JScrollPane中时,需要先将需要添加的组件添加到JPanel中,再将JPanel添加到JScrollPane中。

package com.pikaqiu.gui;

import javax.swing.*;

public class Demo4 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setBounds(400,300,1200,500);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JButton jb = new JButton("香蕉");

        JScrollPane jp = new JScrollPane(jb);
        jf.add(jp);
    }
}

4.常用的组件

4.1标签组件

类:JLable

作用:显示文本或者提示信息

构造函数如下:

package com.pikaqiu.gui;

import javax.swing.*;

public class Demo5 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setBounds(400,300,400,280);

        JLabel jLabel = new JLabel("账号:",SwingConstants.LEFT);
        jf.add(jLabel);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

4.2按钮

类:JButton

构造方法如下:

 其他方法:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo6 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout()); //设置流布局
        jf.setBounds(400,300,400,280);

        JButton jb = new JButton("按钮一");
        jb.setEnabled(true); //按钮是否可用
        jb.setBorderPainted(false); //按钮边界是否显示,默认是true
        jf.add(jb);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

4.3单选按钮组件

类:JRadioButton ButtonGroup

说明:JRadioButton是一个单选按钮,需要将单选按钮加入到按钮组中

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout()); //设置流布局
        jf.setBounds(400,300,400,280);

        JRadioButton jrb1 = new JRadioButton("男");
        JRadioButton jrb2 = new JRadioButton("女");
        ButtonGroup group = new ButtonGroup();
        group.add(jrb1);
        group.add(jrb2);
        jf.add(jrb1);
        jf.add(jrb2);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

4.4复选组件框

类:JCheckBox

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout()); //设置流布局
        jf.setBounds(400,300,400,280);

        JCheckBox box1 = new JCheckBox("吃饭",true);
        JCheckBox box2 = new JCheckBox("睡觉",false);
        JCheckBox box3 = new JCheckBox("打豆豆",false);
        jf.add(box1);
        jf.add(box2);
        jf.add(box3);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 4.5下拉列表框组件

类:JComboBox

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout()); //设置流布局
        jf.setBounds(400,300,400,280);

        JComboBox box = new JComboBox();
        box.addItem("--请选择学历--");
        box.addItem("高中");
        box.addItem("大学");
        box.addItem("研究生");
        jf.add(box);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 4.6菜单栏

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout(FlowLayout.CENTER)); //设置流布局
        jf.setBounds(400,300,400,280);

//        //一级菜单
//        JMenuBar bar = new JMenuBar();
//        JMenu menu = new JMenu("菜单一");
//        JMenuItem item1 = new JMenuItem("选项一");
//        menu.add(item1);
//        bar.add(menu);
//        jf.add(bar);

        //多级菜单
        JMenuBar bar = new JMenuBar();
        JMenu menu1 = new JMenu("菜单一");
        JMenu menu2 = new JMenu("菜单二");
        JMenu menu3 = new JMenu("菜单三");
        JMenuItem item1 = new JMenuItem("选项一");
        JMenuItem item2 = new JMenuItem("选项二");
        JMenuItem item3 = new JMenuItem("选项三");
        JMenuItem item4 = new JMenuItem("选项四");
        JMenuItem item5 = new JMenuItem("选项五");
        JMenuItem item6 = new JMenuItem("选项六");
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(item3);
        menu2.add(item4);
        menu3.add(item5);
        menu3.add(item6);
        bar.add(menu1);
        bar.add(menu2);
        bar.add(menu3);
        jf.add(bar);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 4.7文本组件

类:JTextField

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
        jf.setBounds(400,300,400,280);

        JLabel label = new JLabel("账号:");
        JTextField text = new JTextField("请输入:",22);
        jf.add(label);
        jf.add(text);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 4.8密码框组件

类:JPasswordField

构造函数如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
        jf.setBounds(400,300,280,280);

        JLabel label = new JLabel("账号:");
        JTextField text = new JTextField("",22);
        jf.add(label);
        jf.add(text);

        JLabel label1 = new JLabel("密码:");
        JPasswordField password = new JPasswordField("",20);
        password.setEchoChar('*');
        jf.add(label1);
        jf.add(password);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

4.9文本域组件

类:JTextArea

构造函数如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo7 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Frame");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
        jf.setBounds(400,300,280,280);

        JTextArea area = new JTextArea(20,10);
        area.setLineWrap(true); //自动换行
        jf.add(area);
        area.getText(); //获取文本内容

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 

5.常用的布局

5.1流布局FlowLayout

所有组件像流一样,一个一个排放,排满了一行之后排下一行。默认情况下,每个组件是居中排列的,但是也可以设置。

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo8 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("布局测试");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
        jf.setBounds(400,300,280,280);

        JButton button1 = new JButton("A");
        JButton button2 = new JButton("B");
        JButton button3 = new JButton("C");
        JButton button4 = new JButton("D");
        JButton button5 = new JButton("E");

        jf.add(button1);
        jf.add(button2);
        jf.add(button3);
        jf.add(button4);
        jf.add(button5);


        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 5.2边界布局BorderLayout

边界布局是默认的布局管理方式,边界布局将容器分成了东、南、西、北、中5个区域。

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo8 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("布局测试");
        jf.setLayout(new BorderLayout()); //设置流布局
        jf.setBounds(400,300,280,280);

        JButton button1 = new JButton("北部");
        JButton button2 = new JButton("东部");
        JButton button3 = new JButton("南部");
        JButton button4 = new JButton("西部");
        JButton button5 = new JButton("中心");

        jf.add(button1,BorderLayout.NORTH);
        jf.add(button2,BorderLayout.EAST);
        jf.add(button3,BorderLayout.SOUTH);
        jf.add(button4,BorderLayout.WEST);
        jf.add(button5,BorderLayout.CENTER);


        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

5.3网格布局管理器

网格布局是将容器划分为网格:所有的组件都将按照行和列排列,网格的个数由行数和列数决定。每个组件会填满空格,改变容器的大小,组件的大小也会随之改变。

构造方法如下:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class Demo8 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("布局测试");
        jf.setLayout(new GridLayout(3,3,10,20)); //设置流布局
        jf.setBounds(400,300,400,280);

        JButton button1 = new JButton("A");
        JButton button2 = new JButton("B");
        JButton button3 = new JButton("C");
        JButton button4 = new JButton("D");
        JButton button5 = new JButton("E");
        JButton button6 = new JButton("F");
        JButton button7 = new JButton("G");

        jf.add(button1);
        jf.add(button2);
        jf.add(button3);
        jf.add(button4);
        jf.add(button5);
        jf.add(button6);
        jf.add(button7);


        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

6.常用的事件监听器

一个事件模型中有三个对象:事件源,事件,以及监听程序

 使用步骤:

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Demo9 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("监听事件测试");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT));
        jf.setBounds(400,300,300,300);

        JTextArea area = new JTextArea(10,20);
        area.setLineWrap(true);
        JButton button = new JButton("暴打小苏");

        button.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                area.append("小苏耗子为汁");
            }
        });

        jf.add(area);
        jf.add(button);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

 

7.项目登录界面搭建

package com.pikaqiu.gui;

import javax.swing.*;
import java.awt.*;

public class loginDemo {
    public static void main(String[] args) {
        JFrame jf = new JFrame("登录");
        jf.setLayout(new FlowLayout(FlowLayout.LEFT));
        jf.setBounds(400,300,300,200);

        JLabel label1 = new JLabel("账号:");
        JTextField userName =  new JTextField("",20);
        JLabel label2 = new JLabel("密码:");
        JPasswordField pwd = new JPasswordField("",20);
        JTextField out = new JTextField("登录状态",20);
        JButton jb = new JButton("登录");

        jf.add(label1);
        jf.add(userName);
        jf.add(label2);
        jf.add(pwd);
        jf.add(out);
        jf.add(jb);

        jf.setResizable(false);
        jb.setSize(40,20);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡丘√

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值