Java-界面设计(三)
前言
在学习了监听器之后,可以使用MouseListener接口和Graphics类设计一个简单画图板。
一、画图板
1.坐标系统
- 在 java 中,坐标原点(0,0)位于左上角,以像素为单位
- 以水平向右为横轴x,以水平向下为纵轴y
2.MouseListener 接口
- MouseListener接口用于监听组件上的鼠标事件(点击、按下、释放等)。
- 创建一个类 实现 监听器接口
- 重写接口中的方法 改分号为大括号
注意:其中所有方法都必须重写 - 给括号中添加一段 事件触发之后的代码
- 回到界面类中 创建一个监听器的对象
- 给需要监听的组件 添加添加
3.Graphics类
- Graphics 类用于在组件上进行绘图操作。它提供了绘制各种图形、文本和图像的方法。图形类 GPU 改变窗体上的像素点的颜色。
- Graphics 类常用方法:
-
设置绘图属性
· 设置绘图颜色
setColor(Color c)
参数:
Color c:目标颜色· 设置绘图字体
setFont(Font font)
参数:
Font font:目标字体 -
绘制基本图形
· 绘制直线
drawLine(int x1, int y1, int x2, int y2)
形参:
int x1, y1:起点坐标
int x2, y2:终点坐标· 绘制矩形边框
drawRect(int x, int y, int width, int height)
参数:
int x, y:矩形左上角的坐标
int width, height:矩形的宽度和高度· 绘制填充矩形
fillRect(int x, int y, int width, int height)
参数:
int x, y:矩形左上角的坐标
int width, height:矩形的宽度和高度· 绘制圆形边框
drawOval(int x, int y, int width, int height)
参数:
int x, y:圆外切矩形左上角的坐标
int width, height:圆外切矩形的宽度和高度· 绘制填充圆形
fillOval(int x, int y, int width, int height)
参数:
int x, y:圆外切矩形左上角的坐标
int width, height:圆外切矩形的宽度和高度· 绘制文字
drawString(String str, int x, int y)
参数:
String str:要绘制的字符串
int x, y:字符串的起始坐标
二、创建步骤
1.界面类
- 创建一个类 DrawUI 其中声明一个方法 showUI方法
- 在showUI方法中创建一个窗体类对象 设置好属性
- 创建一个监听器类对象 使用窗体对象添加鼠标监听器
import javax.swing.*;
import java.awt.*;
public class DrawUI {
public void showUI() {
// 创建窗体类对象 命名为 jf
JFrame jf = new JFrame();
// 设置属性:
//标题:setTitle 参数:字符串
jf.setTitle("画图板");
// 宽高:setSize 参数:宽 高
jf.setSize(800, 500);
//位置:setLocationRelativeTo 默认居中显示
jf.setLocationRelativeTo(null);
//关闭模式:setDefaultCloseOperation 参数:JFrame.EXIT_ON_CLOSE
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置布局给窗体
//显示窗体:setVisible 参数:true
jf.setVisible(true);
jf.setResizable(false);
//画笔:图形画在哪个组件上,画笔就从该组件上获取
//从窗体上获取画笔对象,一定要在窗体显示可见之后
Graphics g = jf.getGraphics();
// 创建一个监听器类对象
DrawListen dl = new DrawListen();
//给窗体添加鼠标监听器方法
jf.addMouseListener(dl);
dl.g2 = g;
}
public static void main(String[] args) {
DrawUI ui = new DrawUI();
ui.showUI();
}
}
2.监听器类
- 创建一个类DrawListen 实现 鼠标监听器接口
- 重写鼠标监听器接口的五个方法
- 每个方法写一段输出语句 ,也可以获取鼠标操作时的坐标
MouseEvent e 鼠标事件参数对象 获取鼠标操作时的相关数据 其中包含了坐标
int x = e.getX();
int y = e.getY();
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击了");
}
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按下了");
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标抬起了");
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
}
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入");
}
public void mouseExited(MouseEvent e) {
System.out.println("鼠标离开");
}
}
- 绘制基本图形
- 绘制直线
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 直线
g2.setColor(Color.black);
g2.drawLine(x1, y1, x2, y2);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}

- 绘制矩形边框
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 矩形
// 左上角的坐标 宽度 高度
int x = x1;
int y = y1;
int w = x2 - x1;
int h = y2 - y1;
if (x2 < x1) {
w = -w;
x = x2;
}
if (y2 < y1) {
h = -h;
y = y2;
}
g2.drawRect(x, y, w, h);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}

- 绘制填充矩形
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 矩形
// 左上角的坐标 宽度 高度
int x = x1;
int y = y1;
int w = x2 - x1;
int h = y2 - y1;
if (x2 < x1) {
w = -w;
x = x2;
}
if (y2 < y1) {
h = -h;
y = y2;
}
g2.fillRect(x, y, w, h);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}

- 绘制圆形边框
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 矩形
// 左上角的坐标 宽度 高度
int x = x1;
int y = y1;
int w = x2 - x1;
int h = y2 - y1;
if (x2 < x1) {
w = -w;
x = x2;
}
if (y2 < y1) {
h = -h;
y = y2;
}
g2.drawOval(x, y, w, h);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}

- 绘制填充圆形
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 矩形
// 左上角的坐标 宽度 高度
int x = x1;
int y = y1;
int w = x2 - x1;
int h = y2 - y1;
if (x2 < x1) {
w = -w;
x = x2;
}
if (y2 < y1) {
h = -h;
y = y2;
}
g2.fillOval(x, y, w, h);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}

- 绘制文本
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListen implements MouseListener {
Graphics g2;
int x1, y1, x2, y2;
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println(x1 + " " + y1);
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println(x2 + " " + y2);
// 文本
Font f = new Font("微软雅黑",Font.BOLD,70);
g2.setFont(f);
g2.drawString("Hello World",x1,y1);
//立体文本
Font f = new Font("微软雅黑",Font.BOLD,70);
g2.setFont(f);
for (int i = 0; i < 30; i++) {
Color color = new Color(255-i*8,255-i*8,255-i*8);
g2.setColor(color);
g2.drawString("Hello World",x1+10+i,y1+i);
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}


更多推荐


所有评论(0)