Graphics实现变色、渐变、阴影、倾斜、立体几种效果;了解了这几种效果后便于实现点选验证码,为下一篇做准备。
package cn; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; /** * 会变色的文字 */ public class ChangeColorTextFrame extends JFrame { private ChangeColorTextPanel changeColorTextPanel = new ChangeColorTextPanel(); public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { ChangeColorTextFrame frame = new ChangeColorTextFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); ChangeColorTextFrame frame=new ChangeColorTextFrame(); frame.setVisible(true); } public ChangeColorTextFrame() { super(); setBounds(100, 100, 400, 205); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("会变色的文字"); getContentPane().add(changeColorTextPanel); Thread thread = new Thread(changeColorTextPanel);// 创建线程对象 thread.start();// 启动线程对象 } class ChangeColorTextPanel extends JPanel implements Runnable { // 创建内部面板类 Color color = new Color(0, 0, 255); public void paint(Graphics g) { // 重写paint()方法 Graphics2D g2 = (Graphics2D) g;// 转换为Graphics2D类型 String value = "《视频学Java编程》";// 绘制的文本 int x = 2; // 文本位置的横坐标 int y = 90; // 文本位置的纵坐标 Font font = new Font("楷体", Font.BOLD, 40); // 创建字体对象 g2.setFont(font); // 设置字体 g2.setColor(color);// 设置颜色 g2.drawString(value, x, y); // 绘制文本 } public void run() { Random random = new Random();// 创建随机数对象 while (true) { int R = random.nextInt(256);// 随机产生颜色的R值 int G = random.nextInt(256);// 随机产生颜色的G值 int B = random.nextInt(256);// 随机产生颜色的B值 color = new Color(R, G, B);// 创建颜色对象 repaint();// 调用paint()方法 try { Thread.sleep(300);// 休眠300毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } } } }
package cn; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * 渐变效果的文字 */ public class GradientTextFrame extends JFrame { private GradientTextPanel gradientTextPanel = new GradientTextPanel(); public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { GradientTextFrame frame = new GradientTextFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public GradientTextFrame() { super(); setBounds(100, 100, 365, 205); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("渐变效果的文字"); getContentPane().add(gradientTextPanel); } class GradientTextPanel extends JPanel { // 创建内部面板类 public void paint(Graphics g) { // 重写paint()方法 Graphics2D g2 = (Graphics2D) g;// 转换为Graphics2D类型 String value = "Java全能";// 绘制的文本 int x = 15; // 文本位置的横坐标 int y = 60; // 文本位置的纵坐标 Font font = new Font("楷体", Font.BOLD, 60); // 创建字体对象 g2.setFont(font); // 设置字体 // 创建循环渐变的GraphientPaint对象 GradientPaint paint = new GradientPaint(20, 20, Color.BLUE, 100,120, Color.RED, true); g2.setPaint(paint);// 设置渐变 g2.drawString(value, x, y); // 绘制文本 font = new Font("华文行楷", Font.BOLD, 60); // 创建新的字体对象 g2.setFont(font); // 设置字体 x = 80; // 文本位置的横坐标 y = 130; // 文本位置的纵坐标 value = "编程词典";// 绘制的文本 g2.drawString(value, x, y); // 绘制文本 } } }
package cn; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; /** * 阴影效果的文字 */ public class ShadowTextFrame extends JFrame { private ShadowTextPanel shadowTextPanel = new ShadowTextPanel(); public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { ShadowTextFrame frame = new ShadowTextFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public ShadowTextFrame() { super(); setBounds(100, 100, 354, 205); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("阴影效果的文字"); getContentPane().add(shadowTextPanel); } class ShadowTextPanel extends JPanel { // 创建内部面板类 public void paint(Graphics g) { // 重写paint()方法 String value = "编程词典"; int x = 16; // 文本位置的横坐标 int y = 100; // 文本位置的纵坐标 Font font = new Font("华文行楷", Font.BOLD, 72); // 创建字体对象 g.setFont(font); // 设置字体 g.setColor(Color.GRAY);// 设置颜色为灰色 int i = 0;// 循环变量 g.drawString(value, x, y); // 绘制文本 x -= 3;// 调整绘制点的横坐标值 y -= 3;// 调整绘制点的纵坐标值 g.setColor(Color.BLACK);// 设置颜色黑色 g.drawString(value, x, y); // 绘制文本 } } }
package cn; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * 倾斜效果文字 */ public class ShearTextFrame extends JFrame { private ShearTextPanel shearTextPanel = new ShearTextPanel(); public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { ShearTextFrame frame = new ShearTextFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public ShearTextFrame() { super(); setBounds(100, 100, 365, 205); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("倾斜效果的文字"); getContentPane().add(shearTextPanel); } class ShearTextPanel extends JPanel { // 创建内部面板类 public void paint(Graphics g) { // 重写paint()方法 Graphics2D g2 = (Graphics2D)g;// 转换为Graphics2D类型 String value = "编程词典";// 绘制的文本 int x = 10; // 文本位置的横坐标 int y = 170; // 文本位置的纵坐标 Font font = new Font("华文行楷", Font.BOLD, 72); // 创建字体对象 g2.setFont(font); // 设置字体 g2.shear(0.1, -0.4);// 倾斜画布 g2.drawString(value, x, y); // 绘制文本 } } }
package cn; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; /** * 立体效果文字 */ public class SolidTextFrame extends JFrame { private SolidTextPanel solidTextPanel = new SolidTextPanel(); public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { SolidTextFrame frame = new SolidTextFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public SolidTextFrame() { super(); setBounds(100, 100, 354, 205); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("立体效果的文字"); getContentPane().add(solidTextPanel); } class SolidTextPanel extends JPanel { // 创建内部面板类 public void paint(Graphics g) { // 重写paint()方法 String value = "明日科技"; int x = 16; // 文本位置的横坐标 int y = 100; // 文本位置的纵坐标 Font font = new Font("宋体", Font.BOLD, 72); // 创建字体对象 g.setFont(font); // 设置字体 g.setColor(Color.GRAY);// 设置颜色为灰色 int i = 0;// 循环变量 while (i<8){ g.drawString(value, x, y); // 绘制文本 x+=1;// 调整绘制点的横坐标值 y+=1;// 调整绘制点的纵坐标值 i++;// 调整循环变量的值 } g.setColor(Color.BLACK);// 设置颜色黑色 g.drawString(value, x, y); // 绘制文本 } } }
打赏
如果觉得我的文章对你有帮助,有钱就捧个钱场,没钱就捧个人场,欢迎点赞或转发 ,并请注明原出处,谢谢....