GUI编程
1.概念
1.GUI的概念
GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好;
2.Swing的概述
Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。
Swing中的大部分组件类位于javax.swing包中.
Swing中的组件非常丰富,支持很多功能强大的组件.
2.容器组件
1.什么是组件
组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;
组件不能独立的显现出来,组件只能在特定的容器中显现
2.什么是容器
容器内可以容纳多个组件,通过调用容器的add()方法添加组件
常用容器:窗口(Frame),面板(Panel)
3.JFrame 窗口
1.构造方法
JFrame() 创建新窗体,该窗体初始为不可见
JFrame(String title) 创建新窗体,使用参数title指定标题,该窗体初始为不可见
public static void main(String[] args) {
new JfreamDemo2()
}
2,常用方法
public void creatDemo(){
this.setSize(600,600);//设置大小
//this.setLocation(300,300);//设置初始位置
this.setLocationRelativeTo(null);//设置初始位置为中心
this.setDefaultCloseOperation(JfreamDemo5.DISPOSE_ON_CLOSE);//关闭按钮选项(关闭)
//this.setDefaultCloseOperation(JfreamDemo.DO_NOTHING_ON_CLOSE);()//关闭按钮选项(失效)
this.setTitle("DDSB");//设置窗口标题
this.setResizable(false);//是否允许调整窗口大小
this.setIconImage(new ImageIcon("8.jpg").getImage());//设置图标
this.setVisible(true);//显示窗口(必须加再最后)
4.面板 Jpanel
1.构造方法
JPanel提供面板,它是轻量级的容器;
面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套
JPanel jp =new JPanel();//创建面板
2.常用方法
jp.setBackground(Color.pink);//设置背景颜色
3.布局管理器
swing中,提供了布局管理器类的对象可以管理
每个Jpanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理
器,调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法设置。
Java中有几种常用的布局管理器,分别是:FlowLayout , BorderLayout, GridLayout。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zBiMAy9r-1630925784455)(C:\Users\Administrator\Desktop\23.png)]
1.流式布局
流式布局是 默认布局方式,从左至右 水平排列,一行排满后换行
不改变组件的大小,按组件原有尺寸显示组件,可设置不 同的组件间距,行距以及对齐方式。
/*
new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40个像素。
new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。
new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。
*/
JPanel jp =new JPanel(new FlowLayout());//创建面板
this.add(jp);//面板添加到窗口
JButton jbt1 =new JButton("好");//创建一个按钮,并命名
JButton jbt2 =new JButton("大");//创建一个按钮,并命名
JButton jbt3 =new JButton("儿");//创建一个按钮,并命名
JButton jbt4 =new JButton("邓");//创建一个按钮,并命名
JButton jbt5 =new JButton("端");//创建一个按钮,并命名
jp.add(jbt1);
jp.add(jbt2);
jp.add(jbt3);
jp.add(jbt4);
jp.add(jbt5);
2.边界布局
只允许在容器内放置5个组件
这5个组件的位置是由BorderLayout类中的 North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中
如不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
JPanel jp =new JPanel();//创建面板
this.add(jp);//面板添加到窗口
jp.setLayout(new BorderLayout());//设定布局方式为边界布局
JButton jbt1 =new JButton("好");//创建一个按钮,并命名
JButton jbt2 =new JButton("大");//创建一个按钮,并命名
JButton jbt3 =new JButton("儿");//创建一个按钮,并命名
JButton jbt4 =new JButton("邓");//创建一个按钮,并命名
JButton jbt5 =new JButton("端");//创建一个按钮,并命名
jp.add(jbt1,BorderLayout.CENTER);//放置在中间
jp.add(jbt2,BorderLayout.EAST);//放置在东边
jp.add(jbt3,BorderLayout.NORTH);//放置在北边
jp.add(jbt4,BorderLayout.WEST);//放置在西边
jp.add(jbt5,BorderLayout.SOUTH);//放置在南边
3.网格布局
在网格中放置组件,
每个网格的高度和宽度都相等,
组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的
当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。
JPanel jp =new JPanel();//创建面板
this.add(jp);//面板添加到窗口
/*
this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格
this.add(new Button(“按钮”));
*/
jp.setLayout(new GridLayout(2,2));//两行两列的布局
JButton jbt1 =new JButton("好");//创建一个按钮,并命名
JButton jbt2 =new JButton("大");//创建一个按钮,并命名
JButton jbt3 =new JButton("儿");//创建一个按钮,并命名
JButton jbt4 =new JButton("邓");//创建一个按钮,并命名
JButton jbt5 =new JButton("端");//创建一个按钮,并命名
jp.add(jbt1);
//jp.add(jbt2);
jp.add(jbt3);
jp.add(jbt4);
jp.add(jbt5);
4.常用组件
1.标签
标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
JLabel jl = new JLabel();//创建一个空的标签
JLabel jl1 = new JLabel("正确答案为是");//创建带文本的标签
JLabel jl = new JLabel(new ImageIcon("8.jpg"));//创建一个带图片的标签
jl.setText("邓端是SB吗??");//设置标签内容
jl.setVisible(true);//是否允许标签可见
jl.setFont(new Font("楷体",Font.BOLD,26));//设置 字体(本地库中已有的字体) ,加粗倾斜等等,字体大小
2.单行文本框
只能输入一行文本,不可以换行
JTextField jt = new JTextField();//创建一个单行文本框
JTextField jt1 = new JTextField("文本");//创建一个带文本的单行文本框
JTextField jt2 = new JTextField(15);//创建一个单行文本框并规定列数
JTextField jt2 = new JTextField("文本",15);//创建一个单行文本框带有内容和列数
jt.setColumns(15);//设置文本框的列数
jt.setText("是的");//设置文本框的内容
jt.setEditable(false);//是否允许文本框被修改
jt.setVisible(true) //设置文本框是否为可见
3.多行文本框
可以换行输入多行文本
JTextArea ja= new JTextArea("邓端好大儿儿",20,50);//创建一个带文本,规定行数和列数的多行文本框
ja.setLineWrap(true);//锁定列数,开启自动换行
ja.setWrapStyleWord(false) //是否以单词边界换行,默认false。
ja.getText() //获得文本域中的文本
ja.setFont("楷体") //设置文本域中文本的字体
JScrollPane jsp = new JScrollPane(ja);//加入滚动条
4.密码框
输入的文本自动隐藏
/*三总创建方式
JPasswordField()
JPasswordField(String text)
JPasswordField(String text, int columns)*/
JPasswordField jps = new JPasswordField("密码",15);//创一个密码框,带有文本和列数
char [] c = jps.getPassword();//获得密码框中的文本
String s = new String(c);
System.out.println(s);
5.按钮
JButton jButton = new JButton("贼啊");//创建一个带文本的按钮
jButton.setToolTipText("常规哈哈哈哈");//设置按钮的悬停提示信息
jButton.setEnabled(true);//设置按钮是否可用
jButton.setText(String text) //设置按钮上的文本
jButton.setBackground(Color bg) //设置按钮的背景色
jButton.setVisible(boolean b) //设置按钮是否为可见,由参数b决定
6.菜单栏
菜单直接创建在窗体上面,不在面板上
//创建菜单栏
JMenuBar jbm = new JMenuBar();
//创建菜单
JMenu jm =new JMenu("文件");//创建并命名
//创建菜单项
JMenuItem ji = new JMenuItem("新建") ;//创建并命名
jm.add(ji);//将菜单项加入到菜单栏
setJMenuBar(jbm);//将菜单栏加入到窗口
jbm.add(jm);//将菜单加入菜单栏
5.事件处理
1.基本思路
一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件
一旦事件被接收,监听器就会处理这些事件
一个事件源必须注册监听器以便监听器可以接受对应事件的通知。
监听器类型是ActionListener。
按钮就是事件源
jb1.addActionListener(new AbstractAction() {//监听的事件源直接调用addActionListener
@Override
public void actionPerformed(ActionEvent e) {
//要执行的任务
jb2.setBackground(Color.white);
jb1.setBackground(Color.black);
jL3.setVisible(false);
jL2.setVisible(true);//是否允许标签可见
}
});
2.监听鼠标
jButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标摁下");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标抬起");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标移入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出");
}
});
2.监控键盘
jt.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("键盘按下");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("键盘抬起");
}
});
6.对话框
JOptionPane对话
1.showMessageDialog():消息对话框
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示
ji1.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//showMessageDialog():消息对话框
JOptionPane.showMessageDialog(null,"你没有权限","警告",JOptionPane.WARNING_MESSAGE);
}
});
2.showConfirmDialog():确认对话框
有返回值,返回值为int类型
主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION 默认选项
YES_NO_OPTION 是/否选项
YES_NO_CANCEL_OPTION 是/否/取消选项
OK_CANCEL_OPTION 确定/取消
ji2.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
//showConfirmDialog():确认对话框 有返回值
//确认--0,否--1,取消--2
int res = JOptionPane.showConfirmDialog(null,"您确定要退出吗?","温馨提示",JOptionPane.OK_CANCEL_OPTION);
if (res==0){
dispose();
}
}
});