Java之GUI编程
1、什么是GUI?
图形用户界面,Graphical User Interface,简写为GUI!
2、Java提供了三个主要包做GUI开发:
- .awt 包 – 主要提供字体/布局管理器
- .swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
- java.awt.event 包 – 事件处理,后台功能的实现。
3、java.awt包
1.awt包包括以下内容:
①便于用户输入的一组丰富的界面组件;
②将组件放置在适当位置的几种布局管理器;
③事件处理模型;
④图形和图像工具等等。
2、awt包的控件的体系结构
3、awt容器
①、awt的容器有哪些?Window 和 Panel
②、Window 和 Pabel的区别?Window能够独立存在,Panel必须放入Window中
③、Window的子类? Frame:常用窗体; Dialog:对话框
4、Frame窗口
// 代码实现
public class TestFrame {
public static void main(String[] args) {
// 1、建立一个窗口
Frame frame = new Frame("第一个Frame窗口");
// 2、设置窗口的可见性
frame.setVisible(true);
// 3、设置窗口的大小
frame.setSize(700,400);
// 4、设置窗口出现在屏幕的位置
frame.setLocation(610,340);
// 5、设置窗口的背景色
frame.setBackground(Color.magenta);
// 6、设置窗口大小不能被鼠标改变,默认true
frame.setResizable(false);
}
}
5、Panel面板
// 代码实现
public class TestPanel {
public static void main(String[] args) {
// 1、创建一个窗口
Frame frame = new Frame("JavaFrame窗口");
// 2、设置布局
frame.setLayout(null);
// 3、设置窗口出现的位置和窗口的大小
frame.setBounds(610,340,700,400);
// 4、设置窗口的可见性
frame.setVisible(true);
// 5、设置窗口的背景色
frame.setBackground(Color.PINK);
// 6、设置窗口不能被鼠标改变
frame.setResizable(false);
// 7、创建一个面板
Panel panel = new Panel();
// 8、设置设置窗口出现的位置和窗口的大小(位置相对于窗口)
panel.setBounds(50,50,100,100);
// 9、设置面板的背景色
panel.setBackground(Color.ORANGE);
// 10、设置面板的可见性
panel.setVisible(true);
// 11、将面板加入到窗口
frame.add(panel);
// 12、设置窗口 X 点击可结束程序
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
6、布局管理器
1、流式布局
/**
* @Description 流式布局
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class FlowLayout {
public static void main(String[] args) {
Frame frame = new Frame("流式布局");
// 组件-按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
// 设置为流式布局
frame.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
// FlowLayout.CENTER : 表示从中部开始
// FlowLayout.LEFT : 表示从左边开始
frame.setSize(200,200); // 设置窗体大小
frame.add(button1); // 将组件添加到窗体中
frame.add(button2);
frame.add(button3);
frame.setVisible(true); // 设置窗口可见性
}
}
2、东南西北中
/**
* @Description 东西南北中布局
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class Dnxbz {
public static void main(String[] args) {
Frame frame = new Frame("东南西北中");
Button east = new Button("east");
Button west = new Button("west");
Button south = new Button("south");
Button north = new Button("north");
Button center = new Button("center");
frame.add(east,BorderLayout.EAST);
frame.add(west,BorderLayout.WEST);
frame.add(south,BorderLayout.SOUTH);
frame.add(north,BorderLayout.NORTH);
frame.add(center,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
}
}
3、网格布局
/**
* @Description 网格布局
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("网格布局");
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
Button button4 = new Button("button4");
Button button5 = new Button("button5");
Button button6 = new Button("button6");
frame.setLayout(new GridLayout(3,2)); // 设置为网格布局,3行2列
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
frame.setSize(200,200);
frame.setVisible(true);
}
}
7、事件监听
/**
* @Description 事件监听,按下按钮,触发一些事件
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class TestActionEvent {
public static void main(String[] args) {
Frame frame = new Frame("文本框输入监听");
frame.setVisible(true);
frame.setBounds(720,450,200,200);
TextField field = new TextField();
field.setEchoChar('*'); // 启用用,输入框内的输入的字符会被替换成 * 号,可以起到保护的效果,例如输入密码;
field.addActionListener(new MyActionListener()); // 添加对文本框的监听
frame.add(field); // 将文本框添加到窗体内
frame.addWindowListener(new WindowAdapter() { // 添加窗体的关闭事件
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); // 退出程序
}
});
}
}
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
TextField source = (TextField) e.getSource(); // 获取输入的资源
System.out.printf(source.getText());// 获取文本框输入的内容,并将其输出到控制台
source.setText("");// 将文本框内容设置为空串,清空文本框
}
}
8、Paint(画笔)
/**
* @Description 画笔的使用
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class TestPaint {
public static void main(String[] args) {
new MyPaint().loading();
}
}
class MyPaint extends Frame{
public void loading(){
setBounds(720,450,300,150);
setVisible(true);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.pink);
g.fillOval(200,150,50,50); // 实心
g.setColor(Color.black);
g.drawOval(50,50,50,50); // 空心的
setTitle("画笔");
}
}
9、键盘监听事件
/**
* @Description 键盘监听事件
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class TestKeyEvent {
public static void main(String[] args) {
Frame frame = new Frame("键盘监听事件");
frame.setBounds(200,200,150,150);
frame.setVisible(true);
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP){
System.out.println("按下了 上键");
}
}
});
}
}
4、java.swing包
1、swing包简介
Swing是在AWT基础上发展而来的轻量级组件,与AWT相比不但改进了用户界面,而且所需的系统资源更少;
Swing是纯java组件,使所有的应用程序在不同的平台上运行时具有本机外观和相同的行为。
2、swing包控件的体系结构
3、JFrame窗口
/**
* @Description swing的Jframe窗口
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class MyJframe {
public static void main(String[] args) {
JFrame jFrame = new JFrame("JFrame窗口");
jFrame.setVisible(true);
jFrame.setBounds(200,200,300,200);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 关闭窗口
jFrame.getContentPane().setBackground(Color.pink); // 设置背景色,但是是设置容器的背景色
Label label = new Label("Hello,World!");
jFrame.add(label);
}
}
4、JFrame弹窗
/**
* @Description Swing 弹窗
* @Author BF <xu.rongchang@foxmail.com>
* @Version 1.0
* @Date 2021/5/28
*/
public class DialogDemo {
public static void main(String[] args) {
JFrame jFrame = new JFrame("弹窗");
jFrame.getContentPane().setBackground(Color.ORANGE);
jFrame.setBounds(200,200,300,200);
jFrame.setVisible(true);
JButton jButton = new JButton("点击打开弹窗");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JDialog jDialog = new JDialog();
jDialog.setTitle("弹窗已打开");
jDialog.setBounds(500,400,120,80);
jDialog.setVisible(true);
jDialog.add(new Label("Hello,World!"));
}
});
jFrame.add(jButton);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
5、其他组件
JTextField 单行文本框
JTextArea 多行文本域
JLabel 标签
JComboBox 下拉列表
JCheckBox 复选
JRadioButton 单选
JButton 按钮
其他组件也差不多的用法!