我想在application里实现随机验证码.不过不知道为什么不能下一张.
代码如下:import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
import java.util.*;public class RandomNumberPanel extends JPanel{
private String strRand;
private JLabel jlabel;
public RandomNumberPanel(){
jlabel=new JLabel();
this.add(jlabel);
getRandomImage();
}
private Color getRandomColor(int fc,int bc){
Random ra=new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+ra.nextInt(bc-fc);
int g=fc+ra.nextInt(bc-fc);
int b=fc+ra.nextInt(bc-fc);
return new Color(r,g,b);
}
public void nextImage(){
getRandomImage();
}
private void getRandomImage(){
int width=50;
int height=20;
try{
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
Random r=new Random();
g.setColor(getRandomColor(200,250));
g.fillRect(0,0,width,height);
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandomColor(160,200));
for(int i=0;i<160;i++){
int x=r.nextInt(width);
int y=r.nextInt(height);
int x1=r.nextInt(12);
int y1=r.nextInt(12);
g.drawLine(x,y,x+x1,y+y1);
}
String sRand="";
for(int i=0;i<4;i++){
String s=String.valueOf(r.nextInt(10));
sRand+=s;
g.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));
g.drawString(s,13*i+6,16);
}
strRand=sRand;
g.dispose();
ImageIO.write(image,"JPEG",new FileOutputStream("tmp.jpg"));
jlabel.setIcon(new ImageIcon("tmp.jpg"));
}catch(Exception e){
e.printStackTrace();
}
//this.remove(jlabel);
//this.add(jlabel);
SwingUtilities.updateComponentTreeUI(this);
}
public String getRandomString(){
return this.strRand;
}
}import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class MyDemo extends JFrame implements ActionListener{
private RandomNumberPanel rnp;
private JButton jb;
public MyDemo(){
rnp=new RandomNumberPanel();
jb=new JButton("next");
jb.addActionListener(this);
this.getContentPane().setLayout(new FlowLayout());
this.getContentPane().add(rnp);
this.getContentPane().add(jb);
pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
rnp.nextImage();
SwingUtilities.updateComponentTreeUI(rnp);
}
public static void main(String[] args){
new MyDemo();
}
}
代码如下:import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
import java.util.*;public class RandomNumberPanel extends JPanel{
private String strRand;
private JLabel jlabel;
public RandomNumberPanel(){
jlabel=new JLabel();
this.add(jlabel);
getRandomImage();
}
private Color getRandomColor(int fc,int bc){
Random ra=new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+ra.nextInt(bc-fc);
int g=fc+ra.nextInt(bc-fc);
int b=fc+ra.nextInt(bc-fc);
return new Color(r,g,b);
}
public void nextImage(){
getRandomImage();
}
private void getRandomImage(){
int width=50;
int height=20;
try{
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
Random r=new Random();
g.setColor(getRandomColor(200,250));
g.fillRect(0,0,width,height);
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandomColor(160,200));
for(int i=0;i<160;i++){
int x=r.nextInt(width);
int y=r.nextInt(height);
int x1=r.nextInt(12);
int y1=r.nextInt(12);
g.drawLine(x,y,x+x1,y+y1);
}
String sRand="";
for(int i=0;i<4;i++){
String s=String.valueOf(r.nextInt(10));
sRand+=s;
g.setColor(new Color(20+r.nextInt(110),20+r.nextInt(110),20+r.nextInt(110)));
g.drawString(s,13*i+6,16);
}
strRand=sRand;
g.dispose();
ImageIO.write(image,"JPEG",new FileOutputStream("tmp.jpg"));
jlabel.setIcon(new ImageIcon("tmp.jpg"));
}catch(Exception e){
e.printStackTrace();
}
//this.remove(jlabel);
//this.add(jlabel);
SwingUtilities.updateComponentTreeUI(this);
}
public String getRandomString(){
return this.strRand;
}
}import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class MyDemo extends JFrame implements ActionListener{
private RandomNumberPanel rnp;
private JButton jb;
public MyDemo(){
rnp=new RandomNumberPanel();
jb=new JButton("next");
jb.addActionListener(this);
this.getContentPane().setLayout(new FlowLayout());
this.getContentPane().add(rnp);
this.getContentPane().add(jb);
pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
rnp.nextImage();
SwingUtilities.updateComponentTreeUI(rnp);
}
public static void main(String[] args){
new MyDemo();
}
}
改成
jlabel.setIcon(new ImageIcon(image));