setcolor ()java_java setColor setFont失败,属于BufferedImage.getGraphics的

代码如下publicclassNewappextendsJFrame{publicstaticvoidmain(String[]args){JFramej=newNewapp();j.setBounds(200,200,500,600);j.setVisible(true);}publicvoidpaint(Graphicsg){...

代码如下

public class Newapp extends JFrame{

public static void main(String[] args){

JFrame j=new Newapp();

j.setBounds(200,200,500,600);

j.setVisible(true);

}

public void paint(Graphics g){

super.paint(g);

//g.setColor(Color.red);

//g.drawString("vsdfbgdjkgbs", 300, 300); //这个用g会成功

BufferedImage l=new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);

l.createGraphics();

l.getGraphics().setColor(Color.red); //用这个setColor()会失败,颜色依然是白色

l.getGraphics().drawString("dsfdsfasffasf", 300, 300);

g.drawImage(l, 0, 0, null);

}

}

调用BufferedImage.getGraphics()获得的Graphics

错误原因:调用setColor(),setFont()会失败

求原因

提问:窗体提供的g和BufferedImage.getGraphics()同样是Graphics类

但是前者能设置字体颜色,后者不行,为什么

展开

实现验证码功能可以使用Java的AWT和BufferedImage类来生成图像验证码。以下是一个简单的实现示例: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; public class CaptchaGenerator { private static final int WIDTH = 120; // 图片宽度 private static final int HEIGHT = 40; // 图片高度 private static final int CODE_LENGTH = 4; // 验证码长度 private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 验证码字符集 private static final Random random = new Random(); public static BufferedImage generate() { // 创建图像对象 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); // 填充背景色 g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH, HEIGHT); // 生成随机验证码 StringBuilder code = new StringBuilder(); for (int i = 0; i < CODE_LENGTH; i++) { char c = CODES.charAt(random.nextInt(CODES.length())); code.append(c); } // 绘制验证码 g.setColor(Color.BLACK); g.setFont(new Font("Arial", Font.BOLD, 20)); for (int i = 0; i < CODE_LENGTH; i++) { char c = code.charAt(i); g.drawString(String.valueOf(c), 20 + i * 25, 25); } // 添加干扰线 g.setColor(Color.GRAY); for (int i = 0; i < 5; i++) { int x1 = random.nextInt(WIDTH); int y1 = random.nextInt(HEIGHT); int x2 = random.nextInt(WIDTH); int y2 = random.nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } // 释放资源 g.dispose(); return image; } } ``` 调用`generate()`方法即可生成一个包含随机验证码的BufferedImage对象。可以将该对象输出到HTTP响应中,以便客户端进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值