Java(09)界面编程

Java(09)界面编程

一.三层设计

1.1.三个层

1.表示层

用户界面类

2.事务逻辑层

问题域类

3.数据访问层

数据访问类

1.2.高内聚与低耦合

1.高内聚

每层专注做好自己的工作

2.低耦合

层间做好数据接口

二.GUI类基础概念

2.1.界面组成

1.组件

container

2.布局

Layout

3.事件收发

Message

4.事件处理

Process

2.2.界面介绍

2.3.常用包

1.AWT

  1. 依赖于本地代码,重量级组件
import java.awt.*;

2.Swing

  1. 轻量级
import javax.swing.*;

2.4.体系结构

体系结构

三.swing三层介绍

3.1.框架

1.三层

  1. 顶层容器:整体的钢筋混凝土架构
  2. 中间层:若干单元,多套住房
  3. 原子组件:住房内的具体元素

3.2.常见顶层容器

1.JFrame

带有标题行控制按钮
最常用

2.JApplet

包含在浏览器窗口中

3.JDialog

对话框,没有控制按钮

4.JWindow

没有标题,没有控制按钮

3.3.常见中间容器

要放在顶层容器里面才能用

1.JPanel

常见的

2.JScrollPane

具有滚动条的

3.JSplitPane

具有拆分功能的

4.JTabbedPane

具有若干标签

5.JToolBar

显示常用控制的容器,按行,列排列

3.4.常见原子组件

四.原子组件介绍

1.JButton(按钮)

class Test extends Frame{
    
    
    JButton jbt1;
    JButton jbt2;
    public Test(){
    
    
//        Frame的方法
//        设置大小
        setBounds(200,200,400,400);
//        新建并设置显示的内容
        jbt1 = new JButton("新建");
        jbt1.setBounds(50,50,25,25);

        jbt2 = new JButton("退出");
        jbt2.setBounds(150,150,25,25);

//        添加内容
        this.add(jbt1);
        this.add(jbt2);

//        设置可见
        setVisible(true);
    }
}

2.JTextField(文本框)

输入框

1.常见方法

方法 说明
JTextField()
JTextField()
setText()
getText()

3.JPasswordField(密码框)

4.JTextArea

显示多行文本

1.常见方法

方法 说明
JTextArea()
setText()
getText()

5.JLabel(标签)

标签

1.常见方法

方法 说明
JLabel()
setAlignment 设置对齐方式,有Jlabel.LEFT,Jlabel.CENTER,Jlabel.RIGHT

6.Jlist(列表框)JComboBox(下拉框)JScrollPane(滚动窗格)

1.常见方法

方法 说明
JList()
JList(object data[])
getSelectedIndex 获取索引
getSelectedValue 获取值

2.代码

class ComboBoxGUI extends JFrame{
    
    
	//定义组件
	JPanel jpanel1,jpanel2;
	JLabel jlabel1,jlabel2;
	JComboBox jcomboBox;
	JList jlist;
	JScrollPane jscrollPane;
	
	public ComboBoxGUI() {
    
    
		//创建组件
		jpanel1 = new JPanel();
		jpanel2 = new JPanel();
		jlabel1 = new JLabel("你的籍贯:");
		jlabel2 = new JLabel("旅游地点:");
		
		//构造信息
		String [] jcomboBoxText = {
    
    "北京","上海","广州","南京","武汉","天津"};
		jcomboBox = new JComboBox(jcomboBoxText);
		String [] JlistText = {
    
    "九寨沟","故宫","长城","海南","木兰天池","荷兰"};
		jlist = new JList(JlistText);
		//滚动条
		//希望显示多少项,3项
		jlist.setVisibleRowCount(3);
		//放在滚动面板
		jscrollPane = new JScrollPane(jlist);
		
		this.setLayout(new GridLayout(2,1));
		jpanel1.add(jlabel1);
		jpanel1.add(jcomboBox);
		
		jpanel2.add(jlabel2);
		//添加滚动条
		jpanel2.add(jscrollPane);
		
		this.add(jpanel1);
		this.add(jpanel2);
		
		//设置窗口
        this.setTitle("用户调查");
        //窗口大小
        this.setSize(300,200);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);
	}
	
}

7.JRadioButton(单选框)JCheckBox(复选框)

1.说明

2.代码

class Register extends JFrame {
    
    
	JPanel panel1,panel2,panel3;
	JLabel label1,label2;
	JButton button1,button2;
	
	//多选
	JCheckBox checkBox1,checkBox2,checkBox3;
	
	//单选
	JRadioButton radioButton1,radioButton2;
	//要加一个限制
	ButtonGroup buttonGroup;//单选按钮组
	
	public Register() {
    
    
		panel1 = new JPanel();
		panel2 = new JPanel();
		panel3 = new JPanel();
		
		label1 = new JLabel("你喜欢的运动");
		label2 = new JLabel("你的性别");
		
		button1 = new JButton("注册用户");
		button2 = new JButton("取消注册");
		
		checkBox1 = new JCheckBox("足球");
		checkBox2 = new JCheckBox("篮球");
		checkBox3 = new JCheckBox("乒乓球");
		
		radioButton1 = new JRadioButton("男");
		radioButton2 = new JRadioButton("女");
		//要radioButton1,radioButton2结合
		buttonGroup = new ButtonGroup();
		buttonGroup.add(radioButton1);
		buttonGroup.add(radioButton2);
		
		//设置布局
		this.setLayout(new GridLayout(3,1));
		
		//添加组件
		//panel默认是流式布局
		panel1.add(label1);
		panel1.add(checkBox1);
		panel1.add(checkBox2);
		panel1.add(checkBox3);
		
		panel2.add(label2);
		//这里不是添加buttonGroup
		panel2.add(radioButton1);
		panel2.add(radioButton2);
		
		panel3.add(button1);
		panel3.add(button2);
		
		this.add(panel1);
		this.add(panel2);
		this.add(panel3);
		
		 //设置窗口
        this.setTitle("注册");
        //窗口大小
        this.setSize(300,150);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);
	}
}

五.容器Container

5.1.用途

  1. 容纳组件
  2. 特殊的组件

5.2.JFrame

窗口,默认是边界布局

1.常见方法

方法 说明
setSize() 设置大小
setVisible(true) 设置可见
Container getContentPane() 获得swing窗口的组件
setTitle 设置标题

2.举例

class Hello_Swing_GUI extends JFrame{
    
    
    //定义组件
    //标签
    JLabel message_lab01;
    //文本框
    JTextField message_text01;
    //按钮
    JButton ok_btn01;
    //----------------------
    //构造方法
    public Hello_Swing_GUI(){
    
    
        //创建组件
        //并有显示的文本
        message_lab01 = new JLabel("Message:");
        //文本框的长度为10
        message_text01 = new JTextField(10);
        //按钮
        ok_btn01 = new JButton("OK");

        //设置窗口组件布局
        //流式布局
        this.setLayout(new FlowLayout());

        //添加组件到容器
        this.add(message_lab01);
        this.add(message_text01);
        this.add(ok_btn01);

        //显示窗体
        //设置标题
        this.setTitle("组件显示");
        //设置窗体,左上角是(1,1)
        this.setSize(300,100);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);
    }

}

3.窗体显示正中间

//获取你的屏幕的宽和高
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
//然后设置你编写的窗口的初始位置,也就是在中间,
this.setLocation(width / 2 - 200, height / 2 - 150);

4.退出关闭控制台

//设置窗体关闭时候,保证JVM要退出就是控制台
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

5.禁止修改窗体大小

//静止窗体大小修改
this.setResizable(false);

5.3.Jpanel

面板

默认是流式布局

1.常见方法

方法 说明
Jpanel() 创建面板对象
Jpanel(LayoutManager layout) 创建具有指定布局管理器的面板

2.举例

class Layout_GUI extends JFrame{
    
    
    Layout_GUI(){
    
    
        //定义组件
        JPanel panel1,panel2;
        JButton [] button_artay = new JButton[6];
        //文本框
        JTextField message_text;
        //创建组件
        panel1 = new JPanel();
        panel2 = new JPanel();
        message_text = new JTextField("请输入");
        String button_name[] = {
    
    "苹果","葡萄","桔子",
                "香蕉","荔枝","西瓜"};
        for(int i=0;i<button_artay.length;i++){
    
    
            button_artay[i] = new JButton(button_name[i]);
        }

        //添加组件
        panel1.add(button_artay[0]);
        panel1.add(button_artay[1]);

        panel2.add(button_artay[2]);
        panel2.add(button_artay[3]);
        panel2.add(button_artay[4]);
        panel2.add(button_artay[5]);
        this.setLayout(new BorderLayout());
        //上下
        this.add(panel1,BorderLayout.NORTH);
        this.add(panel2,BorderLayout.SOUTH);
        this.add(message_text,BorderLayout.CENTER);

        //设置窗口
        this.setTitle("综合布局");
        //窗口大小
        this.setSize(300,200);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);

    }
}

5.4.JDialog

对话框,提示信息用的

默认是边界布局

六.布局管理

6.1.常见的布局

1.边界布局(BorderLayout)

2.流式布局(FlowLayout)

3.网格布局(GridLayout)

4.卡片式布局(CardLayout)

5.网格包布局(GridBagLayout)

6.2.边界布局

1.均分5个区域

中央,东西南北

2.六个步骤

  1. 继承JFrame
  2. 定义组件
  3. 创建组件
  4. 添加组件
  5. 设置窗体
  6. 设置显示

3.举例

class Border_Layout_GUI extends JFrame{
    
    
    //定义组件
    JButton button1,button2,button3,button4,button5;
    public Border_Layout_GUI(){
    
    
        //全部都在构造方法里面
        button1 = new JButton("中");
        button2 = new JButton("东");
        button3 = new JButton("南");
        button4 = new JButton("西");
        button5 = new JButton("北");

        //添加组件
        //因为没有设置layout所以要指定位置,默认是边界布局
        this.add(button1,BorderLayout.CENTER);
        this.add(button2,BorderLayout.EAST);
        this.add(button3,BorderLayout.SOUTH);
        this.add(button4,BorderLayout.WEST);
        this.add(button5,BorderLayout.NORTH);

        //设置窗口
        this.setTitle("边界布局");
        //窗口大小
        this.setSize(300,200);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //静止窗体大小修改
        this.setResizable(false);
        //显示
        this.setVisible(true);
    }


}

6.3.网格布局

1.说明

2.举例

class GridLayout_GUI extends JFrame{
    
    
    public GridLayout_GUI(){
    
    
        //定义组件
        int button_size = 9;
        JButton [] button_array = new JButton[button_size];
        //创建组件
        for(int i=0;i<button_array.length;i++){
    
    
            //把值转换为字符串
            button_array[i] = new JButton(String.valueOf(i+1));
        }

        //设置布局
        //3-3列,10为行距
        //前面2个参数是3行3列
        //后面说明上下左右间距是10
        this.setLayout(new GridLayout(3,3,10,10));
        //添加组件
        for(int i=0;i<button_array.length;i++){
    
    
            this.add(button_array[i]);
        }

        //设置窗口
        this.setTitle("网格布局");
        //窗口大小
        this.setSize(300,200);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);

    }
}

6.4.流式布局

1.说明

按照加入的顺序,一行行排列

2.举例

class FlowLayout_GUI extends JFrame{
    
    
    public FlowLayout_GUI(){
    
    
        //定义组件
        //多个按钮可以用一个数组
        //要指定大小的!
        JButton [] button_array = new JButton[6];

        //按钮的名字
        String [] button_name = {
    
    "1","2","3","4","5","6"};
        for(int i=0;i<button_array.length;i++){
    
    
            button_array[i] = new JButton(button_name[i]);
        }

        //设置布局
        //流式布局
        this.setLayout(new FlowLayout());

        //添加组件
        for (int i=0;i<button_array.length;i++){
    
    
            this.add(button_array[i]);
        }

        //设置窗口
        this.setTitle("流式布局");
        //窗口大小
        this.setSize(300,200);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);
        
        //显示
        this.setVisible(true);

    }
}

3.注意

  1. 不限制组件的大小
  2. 容器被缩放时候,组件位置可能变化了

  1. 默认是居中对齐的

6.5例子

1.用户登录

1.界面

2.代码

class Login_GUI extends JFrame{
    
    
    public Login_GUI(){
    
    
        //定义组件
        JLabel label1,label2;
        //用户名
        JTextField username_text;
        //密码
        JPasswordField password_text;
        //按钮
        JButton button1,button2;

        JPanel panel1,panel2,panel3;
        //创建组件
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();
        label1 = new JLabel("用户名");
        label2 = new JLabel("密    码");
        //要设置长度的
        username_text = new JTextField(10);
        password_text = new JPasswordField(10);

        button1 = new JButton("登录");
        button2 = new JButton("取消");

        //设置布局
        this.setLayout(new GridLayout(3,1,5,5));
        panel1.add(label1);
        panel1.add(username_text);

        panel2.add(label2);
        panel2.add(password_text);

        panel3.add(button1);
        panel3.add(button2);

        this.add(panel1);
        this.add(panel2);
        this.add(panel3);
//        this.add(button2);

        //设置窗口
        this.setTitle("用户登录");
        //窗口大小
        this.setSize(300,150);

        //设置窗体关闭时候,保证JVM要退出就是控制台
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //获取你的屏幕的宽和高
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        //然后设置你编写的窗口的初始位置,也就是在中间,
        this.setLocation(width / 2 - 200, height / 2 - 150);

        //显示
        this.setVisible(true);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44179485/article/details/113528973
今日推荐