JAVA105字符是什么_JAVA 字符字

# re: JAVA 字符字

看看我 2002 年时候做的吧:

/**

* @(#)Text2Image.java 1.0 December 2002

*

* Copyright 2002 BeanSoft Studio. All rights reserved.

*

* This software is the proprietary information of BeanSoft Studio.

* Use is subject to license terms.

*

* This application - Text2Image is used to convert text to big symbol image.

*

* License[用户许可]:

* You're free to use it, copy it, or modify it. But not allowed use for commercial purpose,

* 你可以自由的使用, 复制, 修改这个程序. 但是不允许用于商业目的, 并且你不能在源代码中删除

* you should not move the BeanSoft copyright mark and this license in the source code.

*

* Text2Image 可轻松将您输入的汉字,英文转换成由字符组成的特殊字体.

* 可将转换后的文字用于QQ,ICQ,MSN及邮件中.

*/

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.awt.datatransfer.*;

public class Text2Image extends Frame implements ActionListener

{

int width = 10, height = 10;

ByteArrayOutputStream out = new ByteArrayOutputStream();

String symbol;

FileDialog fileDialog;

Thread convertThread = null;

public boolean isStandardAlone = true;

TextArea textArea = new TextArea();

Panel panelInput = new Panel();

TextField fieldInput = new TextField(20);

Choice choiceSymbol = new Choice();

Label labelInputHint = new Label();

Label labelCharHint = new Label();

Panel panelButtons = new Panel();

Button buttonSave = new Button();

Button buttonCopy = new Button();

Button buttonConvert = new Button();

Button buttonAbout = new Button();

Button buttonHelp = new Button();

Label labelFontHint = new Label();

TextField fieldFontName = new TextField();

Label labelHeightHint = new Label();

TextField fieldHeight = new TextField();

Button buttonExit = new Button();

GridLayout gridLayoutInputPanel = new GridLayout();// Target character choice

public Text2Image()

{

// Set event handlers

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

buttonExit_actionPerformed(null);

}

});

this.setIconImage(Toolkit.getDefaultToolkit().getImage("icon.jpg"));

fieldInput.addActionListener(this);

fieldFontName.addActionListener(this);

fieldHeight.addActionListener(this);

buttonConvert.addActionListener(this);

try {

buildSymbolChoice();

jbInit();

} catch(Exception e) {

e.printStackTrace();

}

this.setSize(800, 500);

this.show();

}

public void actionPerformed(ActionEvent e) {

if(convertThread == null) {

convertThread = new Thread() {

public void run() {

convert();

}

};

convertThread.start();

}

}

void buildSymbolChoice() {

choiceSymbol.addItem("■");

choiceSymbol.addItem("★");

choiceSymbol.addItem("□");

choiceSymbol.addItem("☆");

choiceSymbol.addItem("◇");

choiceSymbol.addItem("▲");

choiceSymbol.addItem("△");

choiceSymbol.addItem("▼");

choiceSymbol.addItem("▽");

choiceSymbol.addItem("◎");

choiceSymbol.addItem("·");

choiceSymbol.addItem("∞");

choiceSymbol.addItem("∷");

choiceSymbol.addItem("╳");

choiceSymbol.addItem("√");

choiceSymbol.addItem("¥");

}

void convert() {

try {

buttonConvert.setEnabled(false);

textArea.setText("正在转换中,请稍候...");

out.reset();

Image image = createImage(width, height);// This is a temparary image

String s = fieldInput.getText();

String fontName = fieldFontName.getText();

symbol = choiceSymbol.getSelectedItem();

if(s.equals("")) throw new Exception("对不起,转换之前请首先输入要转换的字符!");

if(fontName.equals("")) throw new Exception("对不起,转换之前请首先输入一个字体名!");

height = Integer.parseInt(fieldHeight.getText());

Font f = new Font(fontName, Font.PLAIN, height);

Graphics g = image.getGraphics();

g.setFont(f);

FontMetrics fm = g.getFontMetrics();

width = fm.stringWidth(s);

height = fm.getHeight();

image = createImage(width, height);// This is the really image to draw string

g = image.getGraphics();

g.setFont(f);

g.drawString(s, 0, fm.getAscent());

handlePixels(image, 0, 0, width, height);

textArea.setText(getCleanedEmptyLineOutput());

} catch(Exception ex) {

if(ex instanceof NumberFormatException)

textArea.setText("错误: 请您输入有效的字体高度.");

else textArea.setText("错误: " + ex.getMessage());

}

buttonConvert.setEnabled(true);

convertThread = null;

}

String getCleanedEmptyLineOutput() {

byte[] bits = out.toByteArray();

String result = "";

try {

BufferedReader in = new BufferedReader(new InputStreamReader(

new ByteArrayInputStream(bits)));

String line;

while((line = in.readLine()) != null) {

if(line.indexOf(symbol) != -1)// Decide if a emtpy line

result += line + "\r\n";

}

in.close();

}catch(Exception ex){

}

return result;

}

public void handlesinglepixel(int x, int y, int pixel) {

int alpha = (pixel >> 24) & 0xff;

int red = (pixel >> 16) & 0xff;

int green = (pixel >> 8) & 0xff;

int blue = (pixel ) & 0xff;

// Deal with the pixel as necessary...

String s = ((red + green + blue) == 0)? symbol:" ";// 2 spaces

try {

out.write(s.getBytes());

if(x == width - 1) {

out.write("\r\n".getBytes());

}

}catch(Exception ex){}

}

public void handlePixels(Image img, int x, int y, int w, int h) {

int[] pixels = new int[w * h];

PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);

try {

pg.grabPixels();

} catch (InterruptedException e) {

System.err.println("interrupted waiting for pixels!");

return;

}

if ((pg.getStatus() & ImageObserver.ABORT) != 0) {

System.err.println("image fetch aborted or errored");

return;

}

for (int j = 0; j < h; j++) {

for (int i = 0; i < w; i++) {

handlesinglepixel(x+i, y+j, pixels[j * w + i]);

}

}

}

// Menu Save As...

void saveAs() {

fileDialog = new FileDialog(this, "");

fileDialog.setMode(FileDialog.SAVE);

fileDialog.setTitle("另存为");

fileDialog.show();

String fileName = fileDialog.getFile();

if(fileName == null) return;

else saveFile(fileDialog.getDirectory() + fileName);

}

// Save the text to the file

void saveFile(String filePath) {

if(filePath == null || filePath.equals("")) return;

String s = new String(out.toByteArray());

try

{

FileWriter out = new FileWriter(filePath);

out.write(s);

out.close();

}

catch(Exception e)

{

textArea.append("无法保存文件" + filePath + ".原因:" + e + "\n");

}

s = null;

}

private void jbInit() throws Exception {

this.setTitle("Text2Image 1.0 字符文本图片转换器 - 作者:刘长炯,杨非");

labelInputHint.setText("请输入要转换的字符[个数不限]:");

fieldInput.setColumns(20);

fieldInput.setText("通信工程");

labelCharHint.setText("请选择显示的符号:");

buttonSave.setLabel("保存");

buttonSave.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonSave_actionPerformed(e);

}

});

buttonCopy.setLabel("复制");

buttonCopy.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonCopy_actionPerformed(e);

}

});

buttonConvert.setLabel("转换");

buttonAbout.setLabel("关于");

buttonAbout.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonAbout_actionPerformed(e);

}

});

buttonHelp.setLabel("帮助");

buttonHelp.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonHelp_actionPerformed(e);

}

});

labelFontHint.setText("请输入字体名[某些字体名系统可能不支持]:");

fieldFontName.setColumns(4);

fieldFontName.setText("宋体");

labelHeightHint.setText("输出字体高度[点数]:");

fieldHeight.setColumns(2);

fieldHeight.setText("18");

buttonExit.setLabel("退出");

buttonExit.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

buttonExit_actionPerformed(e);

}

});

panelInput.setLayout(gridLayoutInputPanel);

gridLayoutInputPanel.setColumns(2);

gridLayoutInputPanel.setRows(0);

gridLayoutInputPanel.setHgap(10);

gridLayoutInputPanel.setVgap(5);

panelInput.setBackground(new Color(192, 192, 255));

panelButtons.setBackground(new Color(255, 200, 100));

textArea.setForeground(Color.green);

textArea.setBackground(Color.black);

this.add(textArea, BorderLayout.CENTER);

this.add(panelInput, BorderLayout.NORTH);

panelInput.add(labelInputHint, null);

panelInput.add(fieldInput, null);

panelInput.add(labelCharHint, null);

panelInput.add(choiceSymbol, null);

panelInput.add(labelFontHint, null);

panelInput.add(fieldFontName, null);

panelInput.add(labelHeightHint, null);

panelInput.add(fieldHeight, null);

this.add(panelButtons, BorderLayout.SOUTH);

panelButtons.add(buttonSave, null);

panelButtons.add(buttonCopy, null);

panelButtons.add(buttonConvert, null);

panelButtons.add(buttonAbout, null);

panelButtons.add(buttonHelp, null);

panelButtons.add(buttonExit, null);

}

void buttonExit_actionPerformed(ActionEvent e) {

this.dispose();

if(isStandardAlone)

System.exit(0);

}

void buttonCopy_actionPerformed(ActionEvent e) {

copy(textArea.getText());

}

// Copy selected text to clipboard

private void copy(String s) {

Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();

if ( s == null || s.equals("") ) return;

try {

clip.setContents( new StringSelection(s), null);

}catch(Exception e) {

}

}

public static void main(String args[])

{

new Text2Image();

}

void buttonSave_actionPerformed(ActionEvent e) {

saveAs();

}

void buttonAbout_actionPerformed(ActionEvent e) {

textArea.setText("Text2Image 1.0 字符文本图片转换器\n"

+ "可轻松将您输入的汉字,英文转换成由字符组成的特殊字体.\n"

+ "可将转换后的文字用于QQ,ICQ,MSN及邮件中.\n"

+ "版本: 1.0; 免费软件; 作者:刘长炯,杨非; 日期: 2002年12月\n"

+ "注意: 禁止将此程序用于商业目的\n"

+ "本程序用 Java 语言编写, 可运行于任何支持 Java 的 OS 上.\n"

+ "Copyright (c) 2002 通信工程学院19914班 刘长炯,杨非. All rights reserved.\n"

);

}

void buttonHelp_actionPerformed(ActionEvent e) {

textArea.setText(

"输入要转换的字符串, 选择显示的符号, 输入字体名, 指定字体高度,\n" +

"最后按下\"转换\"按钮, 或者在上面的三个输入区域按下\"Enter\"键就开始转换了.\n" +

"如果输入的字符较多,或者字体太高, 可能需要多等一会儿.\n" +

"保存: 将当前转换结果保存到文件中." +

"复制: 将转换结果复制到剪贴板上." +

"\n\n" +

"我们强烈建议您使用 Java 2 平台来运行这个程序, 这样您就可以选择更多的字体效果.\n" +

"在低版本的 Java 平台上字体高度不能选的太大, 否则会出现失真现象."

);

}

}

BeanSoft 评论于 2007-07-30 20:18  回复  更多评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值