组件:
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标事件
- 键盘事件
- 破解工具
1、Frame – 界面
package com.wgh.lesson01;
import java.awt.*;
public class TestFrame {
public static void main(String[] args) {
Frame frame = new Frame("我的第一个Java图像界面窗口.");
// 设置可见性
frame.setVisible(true);
// 设置窗口大小
frame.setSize(400, 400);
// 设置背景颜色
frame.setBackground(new Color(85, 150, 68));
// 弹出位置初始化
frame.setLocation(200, 200);
// 设置大小固定 -- 默认是true
frame.setResizable(false);
}
}
2、Panel – 面板
package com.wgh.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
// Panel:面板,可以看成一个容器,但是不能单独存在
public class TestPanel {
public static void main(String[] args) {
// 创建一个总窗口
Frame frame = new Frame();
// 创建一个面板
Panel panel = new Panel();
// 设置布局 -- 默认
frame.setLayout(null);
// 设置坐标和背景色
frame.setBounds(300, 300, 500, 500);
frame.setBackground(new Color(0xD4A410));
// 设置坐标和背景色 -- 相对于frame
panel.setBounds(50, 50, 400, 400);
panel.setBackground(new Color(0x0CC41F));
// 将面板添加到界面中
frame.add(panel);
frame.setVisible(true);
}
}
3、布局管理器
- 流式布局:FlowLayout
// 设置为流式布局 -- 放在中间:CENTER
frame.setLayout(new FlowLayout(FlowLayout.CENTER));
// 添加组件
frame.add(button1);
frame.add(button2);
frame.add(button3);
- 东西南北中:BorderLayout
frame.add(east, BorderLayout.EAST);
frame.add(north, BorderLayout.NORTH);
frame.add(south, BorderLayout.SOUTH);
frame.add(west, BorderLayout.WEST);
frame.add(center, BorderLayout.CENTER);
- 表格布局:GridLayout
frame.setLayout(new GridLayout(2, 2));// 两行两列
// 添加组件
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
4、事件监听
- 按钮事件监听:
package com.wgh.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionEvent01 {
public static void main(String[] args) {
Frame frame = new Frame();
Button button = new Button("bt1");
// 关键代码,添加按钮监听事件
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
frame.add(button, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
// 事件监听
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按下按钮了...");
}
}
- 多个按键共享一个事件: e.getActionCommand()
package com.wgh.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionEvent02 {
public static void main(String[] args) {
Frame frame = new Frame();
// 两个按钮,实现同一个监听
Button button1 = new Button("start");
Button button2 = new Button("stop");
button2.setActionCommand("bt2-stop");
// 同一个监听
MyMonitor myMonitor = new MyMonitor();
button1.addActionListener(myMonitor);
button2.addActionListener(myMonitor);
frame.add(button1, BorderLayout.NORTH);
frame.add(button2, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
class MyMonitor implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// 获取按钮信息: e.getActionCommand()
System.out.println("message = " + e.getActionCommand());
}
}
- 输入框TextField监听
package com.wgh.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestText01 {
public static void main(String[] args) {
new MyFrame();
}
}
class MyFrame extends Frame {
public MyFrame() {
TextField textField = new TextField();
add(textField);
// 监听这个文本框输入的文字
MyActionListener1 myActionListener = new MyActionListener();
// 按下Enter会触发这个输入框的事件 -- 绑定事件
textField.addActionListener(myActionListener);
// 设置替换编码
textField.setEchoChar('*');
this.setVisible(true);
this.pack();
}
}
// 输入框TextField监听
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// 获取资源,返回一个对象
TextField textField = (TextField)e.getSource();
// 输出文本中的内容
System.out.println(textField.getText());
// 清空文本框
textField.setText("");
}
}
超级简单的计算器
package com.wgh.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AllNewTestCounter {
public static void main(String[] args) {
new AllMyNewCounter().newLoadFrame();
}
}
class AllMyNewCounter extends Frame {
TextField num1, num2, num3;
public void newLoadFrame() {
setBounds(0, 0, 500, 70);
num1 = new TextField(10); // 10代表能输入数字的个数
num2 = new TextField(10);
num3 = new TextField(20);
Button button = new Button("=");
Label label = new Label("+");
// 流式布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
// 添加监听事件
button.addActionListener(new AllMyNewCounterListener());
setVisible(true);
}
// 内部类
class AllMyNewCounterListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// 转换
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
// 相加
num3.setText("" + (n1 + n2));
// 抹除记录
num1.setText("");
num2.setText("");
}
}
}
5、画笔
package com.wgh.lesson03;
import java.awt.*;
public class TestPaint {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame {
public void loadFrame(){
setBounds(0, 0, 600, 500);
setVisible(true);
}
// 画笔 -- 方法重写
@Override
public void paint(Graphics g) {
// 画笔,需要的颜色,画笔可以画画
g.setColor(Color.red);
g.drawOval(100, 100, 100, 100);
}
}
6、鼠标点击填充一个圆
目的:想要实现鼠标画画
package com.wgh.lesson03;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMouseListener {
public static void main(String[] args) {
new MyFrame("myPaint");
}
}
// 自己的类
class MyFrame extends Frame {
// 画画需要笔,需要监听鼠标当前的位置,需要集合来存储这个点
// 放在这里的原因是class和方法都可能需要用到
ArrayList points;
public MyFrame(String title){
// 给画板起名字
super(title);
setBounds(0, 0, 300, 300);
// 存鼠标点击的点
points = new ArrayList<>();
setVisible(true);
// 鼠标监听器,针对这个窗口 this表示这个窗口
this.addMouseListener(new MyMouseListener());
}
@Override
public void paint(Graphics g) {
// 画画,鼠标监听事件
// 迭代器
Iterator iterator = points.iterator();
// 将迭代器中的点取出来,并画点
while(iterator.hasNext()){
// 指向下一个
Point point = (Point)iterator.next();
g.setColor(Color.blue);
g.fillOval(point.x, point.y, 10, 10);
}
}
// 将鼠标点击的点加到集合中
public void addPaint(Point point){
points.add(point);
}
// 适配器模式
// 鼠标监听事件
private class MyMouseListener extends MouseAdapter{
// 鼠标点击事件
@Override
public void mousePressed(MouseEvent e) {
// e.getSource() 返回当前对象
// 这里为什么要要是MyFrame? 答:因为鼠标点击在Frame中,需要myFrame进行处理
MyFrame myFrame = (MyFrame) e.getSource();
// 点击的时候,界面会产生一个点,这个点就是鼠标的点
myFrame.addPaint(new Point(e.getX(), e.getY()));
// 每次点击鼠标都需要重新画
myFrame.repaint();
}
}
}
代码运行结果如下: