自从初八后学完慕课的内容后再也没怎么过多接触java的新知识,最近开始每天看一点新的知识。先从GUI开始吧!
一、简介
GUI(Graphic User Interface),这里的概念很好理解,Windows上普遍使用了图形化界面。如果你使用Linux的话,它的字符(命令行)界面与GUI刚好相反。在专业的开发人士看来命令行是非常有效的开发环境,但对于新手甚至是非专业用户来说,字符(命令行)界面是很烧脑的。所以GUI应运而生,目前主流的操作系统均为用户提供了极具特色的图形用户界面。
在介绍概念前先来看一下实现的效果
二、图形化界面的三大要素
- 组件:Java图形用户界面的基本组成元素,eg.“按钮”
- 容器:组件。Eg.JFrame窗体,就是一个容器
- 事件
1.容器:通过一定的布局来容纳其他组件和容器的特殊组件。在Java中,容器类是组件类(Component类)的一个子类,具有组件的所有性质。在AWT技术中,容器类由java.awt包提供;在Swing技术中,容器类由javax.swing包提供
• 顶层容器:Jframe、JApplet、JDialog、Jwindow
• 中间容器:JPanel、JScrollPane、JSplitPane、JDesktopPane、JtoolBar
• 特殊容器:在GUI上其特殊作用的中间层,JInternalFrame、JLayeredPane、JroottPane
只有顶层容器可以独立显示,其他组件必须放在一定容器中才能显示出来。
将组件加入到容器中有且仅有add()方法。但实际的界面往往有很多的组件构成,这就需要容器具有一定的布局方式来依次添加组件。也就是布局管理器(LayoutManager)
2.面板:可以解决将所有需要用到的组件都添加到容器中。可以将界面分区或者分块,让我们看到的界面更美观。
这里也许有人会问,直接添加组件有什么缺点不足呢?答案是:
a. 不使用面板,界面无法分区或分块,所有组件只能按照一种布局方式来分步
b. 一些布局方式只能管理有限个组件。例如,JFrame窗体的默认布局管理器是BorderLayout,它最多管理5个组件
c. 窗体显示区域有限,引入带滚动条的JScrollPane和可分割界面的JSplitPane可以扩展界面
在上面的例子中,分别创建了两个面板位于上方(NORTH)和中心(CENTER)。创建了5个基本组件;在上方面板中创建了显示标签(JLabel),文本框( JTextField),按钮(JButton)。在下方面板中创建了显示标签和文本输出区(JTextArea)。
3.布局:java中预先设置了一些用于布局管理的类,其实例称为布局管理器,可与容器配合工作,负责管理组件在容器中的排列方式。是为了使图形用户界面程序更好地适应不同平台而引入的概念
常用的布局管理器有:边界布局(BorderLayout),顺序布局(FlowLayout),网格布局(GridLayout),卡片布局(CardLayout)等。需要导入java.awt
需要注意的点:
i. 各组件的大小和位置由布局管理器负责。组件的setLocation()、setSize()和setBounds()等方法被布局管理器所覆盖,用户无法设置这些属性。但容器的这些属性用户可以自己设置。
ii. 如果用户想自己控制组件大小和位置,可以取消布局管理器。即setLayout(null),将布局管理器设置为空。
大致编写顺序
//创建容器
JFrame jFrame = new JFrame();
//设置标题
jFrame.setTitle("第一次使用GUI编程");
//创建面板并放在窗体上半部分
JPanel topPanel = new JPanel();
jFrame.add(topPanel,BorderLayout.NORTH);
//创建提示标签并显示提示信息
JLabel show = new JLabel();
show.setText("请输入姓名");
//创建输入框,设置为可编辑,左侧输入,20列
JTextField input = new JTextField();
input.setEditable(true);
input.setHorizontalAlignment(SwingConstants.LEFT);
input.setColumns(20);
// //设置布局
// jFrame.setLayout(new BorderLayout());
//创建按钮组件
JButton jButton = new JButton("提交");
//添加显示标签、输入框和按钮到容器中
topPanel.add(show);
topPanel.add(input);
topPanel.add(jButton);
//创建面板并放在窗体上半部分
JPanel bottomPanel = new JPanel();
jFrame.add(bottomPanel,BorderLayout.CENTER);
//创建提示标签并设置显示信息
JLabel againshow = new JLabel();
againshow.setText("显示所有输入的姓名:");
//创建输出框,5行32列,不可编辑
JTextArea output = new JTextArea();
output.setRows(5);
output.setColumns(32);
output.setEditable(false);
//添加标签和输出框至下部的面板
bottomPanel.add(againshow);
bottomPanel.add(output);
//该事例未添加事件
//设置窗口初始位置与大小并显示,初始位置一显示屏为基准
jFrame.setBounds(400,200,400,200);
//设置窗体关闭方式,默认值是3
jFrame.setDefaultCloseOperation(3);
//默认窗体不显示,要设置
jFrame.setVisible(true);