GUI概述
swing概述
swing是java设计的GUI包,该包包括了GUI中各种组件支持
swing中的组件包括两大类,容器(例如窗口,对话框,面板)和功能组件(如按钮,输入框,菜单等)
容器组件
概述:功能组件不能单独显示,需要加入到容器中,容器可以容纳多个组件,利用add方法向容器中添加组件
最常用的容器组件是:窗口(JFrame)和面板(JPanel)
窗口:
代码演示:
package 窗口;import javax.swing.*;public class LoginFrame extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame();//创建一个窗口}public LoginFrame(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能
}
面板
轻量级的容器,面板可以进行布局
布局有三种形式:流式布局,边界布局,网格布局
代码演示(在上述代码的基础上)
package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame();//创建一个窗口}public LoginFrame(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel();//创建一个面板jPanel.setBackground(Color.BLUE);//给面板选择颜色jPanel.setBackground(new Color(123,222,222));//自定义颜色JButton jButton = new JButton("保存");//创建一个功能组件 按钮jPanel.add(jButton);//将按钮加到面板上this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}
布局管理器
三种布局:流式布局,边界布局,网格布局
三种布局中,在创建面板时,默认使用流式布局
流式布局
FlowLayout布局管理器为流式布局,它按照从左到右,从上到下的顺序,一行排满后换行,不改变组件的大小,按照组件的尺寸显示组件,可以设置不同组件之间的行距及对齐方式,默认居中处理
BorderLayout布局管理器为边界布局,分为5部分,其中中间部分不可以省略
GridLayout布局管理器为网格布局管理器,以网格形式对面板进行分布
下面对三种布局管理器进行代码演示
package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_1 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_1();//创建一个窗口}public LoginFrame_1(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,20,50));//创建一个面板 采用流式布局 (因为流式布局为默认布局,故括号内部内容可以省略)//括号中内容分别表示,左对齐,行距为20像素,列距为50像素JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");JButton jButton4 = new JButton("5");jPanel.add(jButton0);jPanel.add(jButton1);jPanel.add(jButton2);jPanel.add(jButton3);jPanel.add(jButton4);//创建五个按钮,并将其依次添加到面板当中this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}
package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_2 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_2();//创建一个窗口}public LoginFrame_2(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new BorderLayout());//创建一个面板 采用边界布局JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");JButton jButton4 = new JButton("5");jPanel.add(jButton0,BorderLayout.NORTH);jPanel.add(jButton1,BorderLayout.SOUTH);jPanel.add(jButton2,BorderLayout.WEST);jPanel.add(jButton3,BorderLayout.EAST);jPanel.add(jButton4,BorderLayout.CENTER);//创建五个按钮,并将其按照位置放入边界布局的五部分this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}
package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_3 extends JFrame {//继承窗口所在的类public static void main(String[] args) {new LoginFrame_3();//创建一个窗口}public LoginFrame_3(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new GridLayout(2,2));//创建一个面板 采用边界布局JButton jButton0 = new JButton("1");JButton jButton1 = new JButton("2");JButton jButton2 = new JButton("3");JButton jButton3 = new JButton("4");jPanel.add(jButton0);jPanel.add(jButton1);jPanel.add(jButton2);jPanel.add(jButton3);//创建五个按钮,并将其按照位置放入边界布局的五部分this.add(jPanel);//将面板添加到窗口中this.setVisible(true);//让窗口显示出来,放在设置的最后一行}//对窗口类进行重写,给次新建的窗口添加功能}
常用组件
标签(JLable)
标签是容纳文本和图标的控件,通常是用在界面中射别的控件
代码演示:
package 窗口;import javax.swing.*;
import java.awt.*;public class LoginFrame_label extends JFrame {public static void main(String[] args) {new LoginFrame_label();}public LoginFrame_label(){this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行JPanel jPanel = new JPanel(new GridLayout(2,1));JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();//创建一个面板this.add(jPanel);jPanel.add(jPanel1);jPanel.add(jPanel2);//添加面板到窗口JLabel jLabel = new JLabel("登录");JLabel jLabel1 = new JLabel();jLabel1.setText("密码");//利用两种创建标签的方式分别创建标签JTextField jTextField = new JTextField(15);//创建一个输入框组件,用作账号的输入JPasswordField jPasswordField = new JPasswordField(15);//创建一个密码框组件用于密码输入jPanel1.add(jLabel);jPanel1.add(jTextField);jPanel2.add(jLabel1);jPanel2.add(jPasswordField);//依次添加标签和输入框,密码框到面板上//添加面板到窗口this.setVisible(true);//显示窗口}
}
使用常用组件写简单文本框架代码
package 窗口;import javax.swing.*;public class LoginFrame_textbook extends JFrame {public static void main(String[] args) {new LoginFrame_textbook();}public LoginFrame_textbook(){//对面板中的方法进行重写this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行//创建一个文本域,用于文本框的输入功能JTextArea jTextArea = new JTextArea(10,30);//创建一个带有滚动条的面板并添加到面板上JScrollPane jScrollPane = new JScrollPane(jTextArea);this.add(jScrollPane);//给文本框添加强制换行功能,横向滚动条删去jTextArea.setLineWrap(true);//创建菜单栏JMenuBar jMenuBar = new JMenuBar();//添加菜单栏到窗口上this.setJMenuBar(jMenuBar);//创建菜单JMenu jMenu1 = new JMenu("文件");JMenu jMenu2 = new JMenu("编辑");JMenu jMenu3 = new JMenu("帮助");//添加菜单到菜单栏jMenuBar.add(jMenu1);jMenuBar.add(jMenu2);jMenuBar.add(jMenu3);//创建菜单栏选项JMenuItem jMenuItem1 = new JMenuItem("新建");JMenuItem jMenuItem2 = new JMenuItem("保存");JMenuItem jMenuItem3 = new JMenuItem("关于我们");//添加菜单栏选项到相应菜单jMenu1.add(jMenuItem1);jMenu1.add(jMenuItem2);jMenu3.add(jMenuItem3);//将控制面板显示的功能放置到最后this.setVisible(true);//让窗口显示出来,放在设置的最后一行}
}
事件处理
对于上述的面板,窗口,组件的学习仅仅只是完成了图形界面的编写,没有任何实际作用
当用户与GUI组件进行交互时就很会发生事件,此时我们需要进行事件处理
事件源:触发事件的有关组件
java中事件处理的基本思路:
一个事件源产生一个事件并把它送到监听器,监听器一直等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件
监听器代码演示
package 窗口;import javax.swing.*;
import java.awt.event.ActionEvent;public class LoginFrame_JT extends JFrame {public static void main(String[] args) {new LoginFrame_JT();}public LoginFrame_JT(){//重写窗口this.setSize(300,200);//设置窗口的大小,以像素点为单位this.setTitle("欢迎登录");//设置窗口的标题this.setLocation(500,500);//设置窗口的初始位置,采用坐标形式,以像素为单位this.setLocationRelativeTo(null);//常用的设置窗口位置方法,是窗口位置水平居中this.setResizable(true);//设置窗口大小是否可以调整(true为可以,false为不可以)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时程序停止运行//创建面板JPanel jPanel = new JPanel();//将面板保存在窗口中this.add(jPanel);//创建一个输入框JTextField jTextField = new JTextField(15);//创建一个按钮JButton jButton = new JButton("保存");//将按钮添加到面板上jPanel.add(jButton);//将输入框添加到面板上jPanel.add(jTextField);//显示窗口内容this.setVisible(true);//为保存按钮创建监听器jButton.addActionListener(new AbstractAction() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("你完成了一次保存,内容为:"+jTextField.getText());}});}
}