GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
Java GUI主要有两个核心库,分别是AWT(java.awt:Abstract Windows ToolKit(抽象窗口工具包))和Swing(javax.swing:AWT的扩展)
AWT需要调用本地系统方法来实现功能,属重量级控件,
Swing是在AWT的基础上,建立的一套图像界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属轻量级组件。
AWT:
1.包含了很多类和接口2.元素:窗口、
核心类:
组件Component
可以直接用的基本组件:button、TextArea、Label
容器:有窗口Window【分为Frame和Dialog】和面板Panel【Applet】
基本组件存放在容器中,用add操作
窗口frame
Frame类用于创建一个具有标题栏的框架窗口作为程序的主要界面,它不依赖其他容器可以单独存在。运行后可以看到一个弹窗
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
}
面板Panel
特性:面板不能单独存在,必须在容器里面,可以看成一个空间。在程序中通常会使面板来实现一些特殊的布局。
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
//设置布局
frame.setLayout(null);
//pannel面板
Panel panel = new Panel();
panel.setBounds(0,0,100,400);
panel.setBackground(new Color(83, 169, 56));
frame.add(panel);
}
布局管理器LayOut
流式布局(默认)
FlowLayout,流式布局管理器,按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的componentOrientation属性(该属性属于Component),它可能的值如下:
ComponentOrientation.LEFT_TO_RIGHT(默认)
ComponentOrientation.RIGHT_TO_LEFT
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setBounds(0,0,400,400);
//文本框组件
TextField num1 = new TextField();
TextField num2 = new TextField();
TextField num3 = new TextField();
//一个按钮
Button button = new Button("=");
//一个标签
Label label = new Label("+");
//设置流式布局
FlowLayout flowLayout = new FlowLayout();
frame.setLayout(flowLayout);
frame.add(num1);
frame.add(label);
frame.add(num2);
frame.add(button);
frame.add(num3);
}
东西南北中
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
//按钮组件
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);
}
网格布局
GridLayout,网格布局管理器,它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格。
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
//按钮组件
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");
//设置表格3行2列
GridLayout gridLayout = new GridLayout(3, 2);
//设置布局
frame.setLayout(gridLayout);
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
}
事件监听
关闭窗口
//监听窗口关闭事件
frame.addWindowListener(new WindowAdapter() {
//适配器模式
@Override
public void windowClosing(WindowEvent e) {
//结束程序
System.exit(0);
}
});
按钮点击事件
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
//按钮组件
Button button1 = new Button("button1");
//显示设置按钮上的信息
button1.setActionCommand("button1-11");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("eee");
System.out.println(e.getActionCommand());
}
});
frame.add(button1,BorderLayout.CENTER);
}
点击按钮后,控制台打印。setActionCommand是为了在多个按钮的监听写在一个监听器,用if判断
文本框回车事件
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setSize(400,400);
//设置背景颜色
frame.setBackground(new Color(145, 36, 44));
//设置弹出的初始位置 0,0 在左上角
frame.setLocation(0,0);
//设置窗口是否可拉伸
frame.setResizable(false);
//文本框组件
TextField textField = new TextField();
//按下回车键,会触发这个监听
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取资源
TextField field = (TextField) e.getSource();
//打印文本框内容
System.out.println(field.getText());
}
});
frame.add(textField,BorderLayout.CENTER);
}
鼠标监听
监听鼠标按压、鼠标释放、鼠标点击
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setBounds(0,0,400,400);
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入组件区域");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标离开组件区域");
}
@Override
public void mousePressed(MouseEvent e) {
// 获取按下的坐标(相对于组件)
System.out.println("相对组件" + e.getPoint() + ",横坐标:" + e.getX() + ", 纵坐标:" + e.getY());
// 获取按下的坐标(相对于屏幕)
System.out.println("相对屏幕" + e.getLocationOnScreen() + ",横坐标:" + e.getXOnScreen() + ", 纵坐标:" + e.getYOnScreen());
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标释放");
}
@Override
public void mouseClicked(MouseEvent e) {
// 鼠标在组件区域内按下并释放(中间没有移动光标)才识别为被点击
System.out.println("鼠标点击");
}
});
}
鼠标拖动、鼠标移动、鼠标滚轮滚动
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setBounds(0,0,400,400);
/**
* 鼠标移动/拖动监听器
*/
frame.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
// 鼠标保持按下状态移动即为拖动
System.out.println("鼠标拖动");
}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("鼠标移动");
}
});
/**
* 鼠标滚轮监听器
*/
frame.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// e.getWheelRotation() 为滚轮滚动多少的度量
System.out.println("mouseWheelMoved: " + e.getWheelRotation());
}
});
}
键盘监听
上下左右键和空格键:KeyEvent.VK_UP
public static final int VK_LEFT = 0x25;
public static final int VK_UP = 0x26;
public static final int VK_RIGHT = 0x27;
public static final int VK_DOWN = 0x28;
public static final int VK_SPACE = 0x20;
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setBounds(0,0,400,400);
/**
* 键盘监听事件
*/
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// 获取键值,和 KeyEvent.VK_XXXX 常量比较确定所按下的按键
System.out.println("按下: " + e.getKeyChar() + ",键值为:" + e.getKeyCode());
}
@Override
public void keyTyped(KeyEvent e) {
// e.getKeyChar() 获取键入的字符
System.out.println("键入: " + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("释放: " + e.getKeyCode());
}
});
}
窗口监听
public static void main(String[] args) {
//frame窗口
Frame frame = new Frame("java图形化界面窗口");
//设置可见性 与 窗口大小
frame.setVisible(true);
frame.setBounds(0, 0, 400, 400);
/**
* 窗口监听事件
*/
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗口被关闭了");
System.exit(0);
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("窗口被激活了");
}
});
}
画笔Paint
public class MyPaint extends Frame {
public void loadFrame(){
setBounds(0,0,600,400);
setVisible(true);
}
@Override
public void paint(Graphics g) {
//设置画笔的颜色
g.setColor(Color.RED);
//设置画一个圆圈
g.drawOval(50,100,50,50);
//画实心圆
g.fillOval(100,100,50,50);
//重新设置画笔的颜色
g.setColor(Color.GREEN);
//画实心矩形
g.fillRect(150,100,100,50);
}
}
在别的类中,启动
public static void main(String[] args) {
new MyPaint().loadFrame();
}
Swing
Jframe