GUI: 就是指图形用户界面
作用体现: 在我们日常的聊天中,都是通过聊天界面进行聊天,因此,没有一个好的GUI是无法进行更好的聊天的
容器组件: java的图形用户界面的基本组成部分是组件
组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来
常用容器: 窗口(Frame)和面板(Panel)是最常用的两个容器,容器可以容纳多个组件,可以通过调用容器的add方法向容器中添加组件。
这张图片是窗口和面板的形象图
new JFrame; 在程序中创建窗体;
jpanel:
JPanel提供面板,面板中可以添加其它组件,也可以设置布局,可以使用面板来实现布局嵌套
JPanel(): 创建一个空面板 JPanel((LayoutManaer layout): 创建一个带有指定布局的面板
JFrame中的常用方法:
void setSize(int width, int height)
void setVisible(boolean b)
void setTitle(String title
void setResizable(boolean resizable)
void setLocation(int x,int y)
void setLocationRelativeTo(null);
void setDefaultCloseOperation(int operation)
void dispose()
void setBackground(Color bg)
void setLayout(LayoutManager mgr)
Component add(Component comp)
代码实现:
public class demo1Frame extends JFrame {
public demo1Frame(){
this.setTitle("窗口标题");
this.setSize(500,600);//设置窗口大小
/* this.setLocation(300,500);//窗口坐标位置*/
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setResizable(false);//禁止去设置窗口大小
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口不可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
//在窗口上添加面板
JPanel jPanel =new JPanel();
jPanel.setBackground(new Color(171,153,203));//设置面板颜色
JButton jButton = new JButton("登录");
jPanel.add(jButton);
this.add(jPanel);
this.setVisible(true);//显示出来窗口
}
public static void main(String[] args) {
demo1Frame demo1 = new demo1Frame();//这里已经创建了一个窗口,只不过还没有显示出来,在构造方法中为其设置一些属性
}
}
布局管理器(Container):
在swing中,有布局管理器类的对象可以管理,管理时调用jpanel中的的setLayout方f法
1.FlowLayout()流式布局 2.BorderrLayout()边界布局 3.GridLayout()网格布局
FlowLayout将组件按照从左到右、从上到下的顺序来安排,默认情况使组件尽量居中放置。
this.setLayout(new FlowLayout());
this.add(new Button("登录"));
this.add(new Button("取消"));
行内从左到右,一行排满后换行。
不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。
new FlowLayout(FlowLayout.LEFT,20,40);左对齐,组件之间水平间距20个像素,垂直间距40
个像素。
new FlowLayout(FlowLayout.LEFT);左对齐
new FlowLayout();居中对齐方式
代码例子:
public class demo2Frame extends JFrame {
public demo2Frame(){
this.setTitle("窗口标题");
this.setSize(500,600);//设置窗口大小
/* this.setLocation(300,500);//窗口坐标位置*/
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setResizable(false);//禁止去设置窗口大小
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口不可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
//在窗口上添加面板
//JPanel默认是流式布局,组件居中对齐
JPanel jPanel =new JPanel(new FlowLayout(FlowLayout.LEFT));//左对齐
/* JPanel jPanel =new JPanel(new FlowLayout(FlowLayout.LEFT,40,20));//设置组件的间距*/
JButton jButton = new JButton("登录");
JButton jButton1 = new JButton("登录");
JButton jButton2 = new JButton("登录");
jPanel.add(jButton);
jPanel.add(jButton1);
jPanel.add(jButton2);
this.add(jPanel);//this--窗口
this.setVisible(true);//显示出来窗口
}
public static void main(String[] args) {
demo2Frame demo2 = new demo2Frame();//这里已经创建了一个窗口,只不过还没有显示出来,在构造方法中为其设置一些属性
}
}
BorderLayout : 容器内最多只允许放5个组件,被小帅称为东南西北中流管理器
this.add(new Button(“登录
”
) ,BorderLayout.NORTH);其他方向也可以
组件的大小可以改变,在添加组件时,默认是在中间区域,每个区域只能加入一个组件,如加入多则先前加入的会被覆盖。
代码例子:
public class demo3Frame extends JFrame {
public demo3Frame(){
this.setTitle("窗口标题");
this.setSize(500,600);//设置窗口大小
/* this.setLocation(300,500);//窗口坐标位置*/
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setResizable(false);//禁止去设置窗口大小
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口不可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
//在窗口上添加面板
JPanel jPanel =new JPanel(new BorderLayout());
JButton jButton = new JButton("登录1");
JButton jButton1 = new JButton("登录2");
JButton jButton2 = new JButton("登录3");
jPanel.add(jButton,BorderLayout.WEST);//指定组件在边界中的位置
jPanel.add(jButton1,BorderLayout.NORTH);
jPanel.add(jButton2);
this.add(jPanel);//this--窗口
this.setVisible(true);//显示出来窗口
}
public static void main(String[] args) {
demo3Frame demo3 = new demo3Frame();//这里已经创建了一个窗口,只不过还没有显示出来,在构造方法中为其设置一些属性
}
}
缩放:
北、南两个区域在水平方向缩放。
东、西两个区域在垂直方向缩放。
中部可在两个方向上缩放。
GridLayout:
布局是矩形网格,每个网格的大小都相等,代码实现如下:
this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格 this.add(new Button(“按钮”));
当组件数目大于网格数时,
GridLayout
保持行数不变而自动增加列数。
在
GridLayout
构造方法中指定分割的行数和列数
代码例子;
public class demo4Frame extends JFrame {
public demo4Frame(){
this.setTitle("窗口标题");
this.setSize(500,600);//设置窗口大小
/* this.setLocation(300,500);//窗口坐标位置*/
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setResizable(false);//禁止去设置窗口大小
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口不可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
//在窗口上添加面板
JPanel jPanel =new JPanel(new GridLayout(2,2));
JButton jButton = new JButton("登录1");
JButton jButton1 = new JButton("登录2");
JButton jButton2 = new JButton("登录3");
JButton jButton3 = new JButton("登录4");
jPanel.add(jButton);//按照添加顺序排
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
this.add(jPanel);//this--窗口
this.setVisible(true);//显示出来窗口
}
public static void main(String[] args) {
demo4Frame demo4 = new demo4Frame();//这里已经创建了一个窗口,只不过还没有显示出来,在构造方法中为其设置一些属性
}
}
JLabel:标签
标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
JLabel jLabel = new JLabel("账号");
jLabel.setForeground(Color.BLUE);
jLabel.setFont(new Font("宋体",Font.BOLD,20));
可以给标签设置文本,获得标签上的文字,设置字体和字体颜色
JTextField:
单行文本
JTextField jTextField = new JTextField(15);
void setText(String text) 设置文本框中的文本
String getText() 获得文本框中的文本
void setEditable(boolean b)
设置文本框是否可以编辑
setColumns(20);
设置列数
JTextArea:
多行文本框
JTextArea() 创建一个空的文本域
JTextArea(String text) 用指定文本初始化文本域
JTextArea(int rows, int columns)
创建一个指定行数和列数的空文本域
JTextArea(String text,int rows, int columns) 创建一个带文本,并指行数和列数的
方法:
void setText(String text)
设置文本域中的文本
String getText()
获得文本域中的文本
void setFont(Font font)
设置文本域中文本的字体
void setLineWrap(boolean wrap) //
是否自动换行
,
默认
false
JScrollPane scrollPane = new JScrollPane(txtArea);
add(scrollPane )
代码例子:
public class demo8Fream extends JFrame {
public demo8Fream (){
this.setTitle("欢迎登录");
this.setSize(500,400);
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
JPanel jPanel = new JPanel();
JTextArea jTextArea = new JTextArea(5,20);//在面板上创建一个5行20列的文本域
jTextArea.setWrapStyleWord(true);//针对于英文来说,换行时不会吧英文拆开
jTextArea.setLineWrap(true);//在文本框里输入文本可以自动换行
JScrollPane jScrollPane = new JScrollPane(jTextArea);//设置文本框滚轮式滑动
jPanel.add(jScrollPane);
this.add(jPanel);
this.setVisible(true);
}
public static void main(String[] args) {
new demo8Fream();
}
}
JButton:按钮
JButton
(String text) 创建一个带文本的标签
JButton
(Icon image)
创建一个带图像的标签
方法
:
void setBackground(Color bg)
设置按钮的背景色
void setEnabled(boolean b) 设置启用(或禁用)按钮,由参数b
决定
void setToolTipText(String text) 设置按钮的悬停提示信息
菜单: 1菜单栏 2 菜单 3 菜单项
public class demo7Frame extends JFrame {
public demo7Frame() throws HeadlessException {
this.setSize(400,300);
this.setTitle("欢迎登录");
this.setLocationRelativeTo(null);
JMenuBar jMenuBar = new JMenuBar();//菜单栏
JMenu jMenu = new JMenu("设置");//菜单
JMenu jMenu1 = new JMenu("文件");
JMenuItem jMenuItem = new JMenuItem("账号登录");//菜单选项
JMenuItem jMenuItem1 = new JMenuItem("保存");
jMenu.add(jMenuItem);
jMenu1.add(jMenuItem1);
jMenuBar.add(jMenu);
jMenuBar.add(jMenu1);
this.setJMenuBar(jMenuBar);
this.setVisible(true);
}
public static void main(String[] args) {
new demo7Frame();
}
}
事件处理 :
目前只有了静态的图形用户界面,接下来需要实现功能,
比如按按钮,点击鼠标
一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件;
一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知
假如想要处理按钮的时间,按钮就是事件源,
监听器类型是ActionListener。
当然针对鼠标,键盘,都有对应的监听器类型
ActionListener:
//为登录按钮注册时间监听器,创建ActionListener匿名内部类
//为了简化内部类的定义,可以使用匿名内部类的方式简化语法
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(jTextField.getText());
}
});
MouseListener:
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击");
}
//这一块不用MouseListener是因为创建这个匿名内部类需要重写里面的所有方法
}); //而用MouseAdapter可以自己随便用重写方法的个数,想用几个用几个*/
KeyListener:
jTextField.addKeyListener(new KeyAdapter() {//释放的时候出来
@Override
public void keyReleased(KeyEvent e) {
System.out.println(jTextField.getText());
System.out.println(e.getKeyChar()+":"+e.getKeyCode());//按下的键和键的编码
}
});*/
JOptionPane对话框
ERROR_MESSAGE
错误消息提示
INFORMATION_MESSAGE
信息提示
WARNING_MESSAGE
警告提示
QUESTION_MESSAGE
问题提示
PLAIN_MESSAGE
简洁提示
showConfirmDialog()
:确认对话框
DEFAULT_OPTION
默认选项
YES_NO_OPTION
是
/
否选项
YES_NO_CANCEL_OPTION
是
/
否
/
取消选项
OK_CANCEL_OPTION
确定
/
取消
代码例子:
public class demo10Frame extends JFrame {
public demo10Frame(){
this.setTitle("窗口标题");
this.setSize(500,600);//设置窗口大小
this.setLocationRelativeTo(null);//相对位置,水平居中
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口不可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,并且关闭正在运行的程序
JPanel jPanel =new JPanel();
JLabel jLabel = new JLabel("账号");
JTextField jTextField = new JTextField(15);
JButton jButton = new JButton("登录");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s = jTextField.getText();
if(s.length()>10){
/* JOptionPane.showMessageDialog(null,"账号长度不能大于10位字符");*/
int a = JOptionPane.showConfirmDialog(null,"你确定要退出吗","错误提示",JOptionPane.YES_NO_OPTION);
if(a==0){
dispose();
}
return;//既然已经进入了if循环,就不能再继续进行下去,所以要对她进行一个返回
}
}
});
jPanel.add(jLabel);
jPanel.add(jTextField);
jPanel.add(jButton);
this.add(jPanel);
this.setVisible(true);
}
public static void main(String[] args) {
demo10Frame demo10 = new demo10Frame();
}
}