是吗? 只要工资能像房价那样涨幅, 经济就真的繁荣了. 看看日本当年是如何藏富于民的.
呵呵, 我有个朋友做技术顾问, Oracle, BEA, IBM 的证书都拿全了, 什么架构师认证啥的. 不同的职业对证书有不同的需要.
re: gwt项目开发的经验集----会一直增加 BeanSoft 2007-08-03 23:48
不知道帖子怎么能反复出现在首页啊? 请不吝赐教... 我也想写一个专题, 把内容连起来.
re: FTP上传,下载 BeanSoft 2007-08-03 23:13
友情支持一下!
re: JSF Sucks[未登录] beansoft 2007-08-01 00:17
呵呵, 那你看看 ASP.NET 的 WebForm 是不是也让你随便写 JavaScript? 既然选择了, 就学好它呗. 怪只怪这么多公司竟然还作不出一个像样的 Java IDE 能很好的支持可视化网页编辑器和服务器端控件, 全是 XML 配置文件啥的, 真是让人郁闷.
re: WebLogic8安装配置[未登录] beansoft 2007-08-01 00:14
哥哥, Weblogic 10 都出来了....
re: JAVA 字符字 BeanSoft 2007-07-30 20:18
看看我 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 平台上字体高度不能选的太大, 否则会出现失真现象."
);
}
}
re: 我下地劳动的视频[未登录] beansoft 2007-07-30 19:13
我老家也是农村. 说实话农村的风景挺不错的, 但是每当我看到这些在地里干活的同胞们的时候, 我想的是这样哪年才能实现现代化呢? 哪年我才能在老家编程, 上网呢? 这么多人的劳动力和聪明就局限在了土地上了. 可悲的新社会, 发展了快60年了, 连印度都不如.
re: 关于JSF[未登录] beansoft 2007-07-30 17:52
下了个微软的 Microsoft Visual Web Developer 2005 速成版, 感觉 JSF 跟 ASP.NET Web Form 的确很像. 微软的组件类库很方便, 很快速, 拖放几下就可解决问题. 而且他们的设计器既能解析HTML,也能解析里面的 TagLib. 所以 Tag Lib 本身不是错, 开发组件难点很大也不是错. 微软的 IDE 已经帮你做好了所有的东西. 所以 JSF 难点就是 IDE 太差, 组件定制可以由专业厂商来做. 微软的 .NET 控件从来不鼓励程序员自己去做.
一句话, 每人都想做大自己挣钱, 才导致了这么多 Java 厂商 作出来的东西竟然还不如微软一家公司做的. 那么多框架, 很多都是垃圾. 只有组件没有 IDE 你让人手写代码来做页面?
re: Ruby vs Java 的几个误区 BeanSoft 2007-07-24 16:39
类库不是内库....
re: 目录树程序 BeanSoft 2007-07-19 17:52
支持一下, 呵呵.
re: 利用Filter限制用户浏览权限 BeanSoft 2007-07-19 14:32
re: Cron 表达式的写法。 BeanSoft 2007-07-19 09:56
cron 相当于 Windows 下的计划任务. 我们以前公司用它做 Weblogic 定时重启, 以及报表, 挺不错的.
re: CowNewPIS源码及开发文档发布了 BeanSoft 2007-07-18 17:09
源码里的注释也很少, 虽然很支持你们的活动, 但是这个下载包最多只能算是源码包, 不带文档.
package com.cownew.demo.client;
import com.cownew.PIS.framework.common.IValueObject;
import com.cownew.PIS.framework.common.db.Selectors;
import com.cownew.PIS.ui.commonUI.ListUI;
import com.cownew.PIS.ui.ctrl.query.QueryColumnProperty;
import com.cownew.PIS.ui.ctrl.query.QueryColumnPropertyList;
import com.cownew.PIS.ui.ctrl.query.QueryExecutor;
import com.cownew.demo.common.BookInfo;
import com.cownew.demo.common.IBookDAO;
public class BookListUI extends ListUI
{
public BookListUI() throws Exception
{
super();
}
public IValueObject generateNewVO() throws Exception
{
return new BookInfo();
}
public Class getEditUIClass()
{
return BookEditUI.class;
}
public Class getServiceIntfClass()
{
return IBookDAO.class;
}
protected QueryExecutor getQueryExecutor()
{
QueryExecutor qe = super.getQueryExecutor();
QueryColumnPropertyList qcpList = new QueryColumnPropertyList();
qcpList.add(new QueryColumnProperty("id","id",false));
qcpList.add(new QueryColumnProperty("number","编码",true));
qcpList.add(new QueryColumnProperty("name","名称",true));
qcpList.add(new QueryColumnProperty("author.name","作者",true));
qcpList.add(new QueryColumnProperty("publishDate","出版日期",true));
Selectors selectors = new Selectors();
selectors.add("author");
qe.setSelectors(selectors );
qe.setColumnList(qcpList );
return qe;
}
}
re: SAAS(软件即服务)暗流即将爆发? BeanSoft 2007-07-18 17:06
JavaEye 站长? 唉, 现在都喜欢务虚.
恕我直言, 界面还需改进, 虽然功能很多, 但是好像不太直观易用. 可以和我 上学时候的练习: JDBC Explorer
http://www.blogjava.net/beansoft/archive/2007/07/18/131068.html 对比一下, 也可以参考商业软件:
http://www.dbvis.com/products/dbvis/ 的界面设计. 既然要做 GUI 版本, 那就还是尽量做的非常专业直观易用漂亮为好.
re: CowNewPIS源码及开发文档发布了 BeanSoft 2007-07-18 10:09
《J2EE开发全程实录 》免费试读版.rar ... 汗一个先, 没看到其它的开发文档.
re: 鼠标手势输入插件 BeanSoft 2007-07-18 09:58
也许如此吧, 可能有时候还需要精通 SWT, JFace, Eclipse API. 牵扯到底层事件封装就不得不看 RCP 下面的源码了. 个人认为不精通 SWT 就想写出像 Azureus 那样优秀的应用来是很困难的.
Netbeans 开发 Swing 和 J2ME 无人能敌啊, 不知道整死了多少做 J2ME 开发工具的公司.
re: 一个简单blog备份工具的实现 BeanSoft 2007-07-16 15:35
是呀, 我也这样想, 万一哪天挂了, 就没了... 回头有空的时候改改, 保存成 HTML 格式会好很多的.
re: Struts标签库(看过的给点中肯的意见) BeanSoft 2007-07-16 15:21
挺全的! 拿去学习了!
re: 程序语言中的变量名为什么不能以数字开头 BeanSoft 2007-07-16 15:20
还有很多语法规定其实就是为了编译器便于进行分析才这样约束的. 语言越高级, 里面的语法约束就越多.
re: Eclipse精粹学习笔记 BeanSoft 2007-07-16 14:53
搞 Apusic 渠道培训的, 支持一下! 我是讲 Java 开发的, 以前讲过一些企业的 Weblogic 培训. 有一本国人写的 <<Eclipse从入门到精通.pdf>> 个人觉得写的要好些, 除了使用之外, 还介绍了 Eclipse 相关的开发, 例如 Plugin, SWT, JFace 等.
re: 一个简单blog备份工具的实现 BeanSoft 2007-07-16 13:55
支持一下读取 MetaWeblog 的思路.
http://www.blogjava.net/beansoft/archive/2007/06/20/125255.htmlBlogJava 备份文章阅读器+离线浏览备份(含源码,SWT)
里面已经包含了保存 CSS, js, image 的 MHT 文件生成器的API, MHT 文件可以离线浏览(IE下). 不过我的所有文章列表都是从 BlogJava 备份文件那个大 XML 里面分析的. 不会 RCP, 交流一下思路先. 我用 HtmlParser 这个项目做的 HTML 解析, 比正则表达式准确率高一些.
re: Spring 官方培训即将进军中国 BeanSoft 2007-07-13 16:22
早说了, 天下哪有免费的午餐啊... 开源不开放核心文档和设计. 不过比起 Java EE 培训来, 还是便宜的多了.
re: swt 日期控件 BeanSoft 2007-07-12 18:26
re: 为什么使用Serializable(序列化) BeanSoft 2007-07-12 11:50
不错, 谢谢分享!
re: 准备返回北京 BeanSoft 2007-07-11 16:47
颖 是个好媳妇....
re: 扫雷心得 BeanSoft 2007-07-11 15:24
非常感谢分享!
re: 易博: 一颗博客编辑器的新星 BeanSoft 2007-07-10 09:59
看了一下介绍, 很不错...现在dudu推荐的是 Windows Live Writer, 能上传图片. 可惜是 .NET 做的.
个性化界面,剥去Eclipse的影子... 这个有点难, 除非用 Canvas 重画组件了, 连换肤都不好做呢, 不信你试试, Menu, Toolbar 什么都改不了颜色和背景色.
re: 【翻译】不使用Spring的5个理由 BeanSoft 2007-07-06 17:11
他们的 API 到现在也没稳定, 还加入了大量不相干的东西, 慢慢就变成了个不如 Java EE 规范的重量级容器了...唉 我现在最大的体会就是学生看到这些开源框架里面那么多垃圾的东西, 照样也要都学会, 头大...
re: 【翻译】不使用Spring的5个理由 BeanSoft 2007-07-06 13:57
建议各位评论的时候留个地址, 互相学习参观一下也不错啊, 要不然说了半天也不知道大哥自己分享的别的资源在那里.
re: 【翻译】不使用Spring的5个理由 BeanSoft 2007-07-06 09:50
不知道 Spring 用来维护超过2K个类代码的时候配置文件会不会很好读. 为了 DI 而 DI, 明明一个 new MyInterfaceImpl() 就能搞定的非要配置一下, 还没看到哪个上点规模的系统今天要切换到这个实现, 明天要切换到另一个实现的. 当然如果是经常修改实现, 的确用 Spring 挺方便的. 当然 Spring 还有其它的一些功能, 就看你用的时候有没有必要了, 能解决问题的方法往往都不是只有一种.
M10现在的编辑器也像 Eclipse 那样显示一个红叉, 从出错的代码一直到根目录.
顶! 建议全民普及 Firefox! 中毒的机会也少!
re: 如何解决问题 BeanSoft 2007-07-03 13:39
建议给某些群成员阅读一下... 天天都是问一些很简单却又自己不去尝试解决的问题.
re: 公司Eclipse-RCP培训PPT教材 BeanSoft 2007-07-03 12:22
re: 公司Eclipse-RCP培训PPT教材 BeanSoft 2007-07-02 17:13
不会有版权问题吧...谢了!
re: Java相对路径总结 BeanSoft 2007-06-29 17:29
的确不错, 非常感谢分享!
Eclipse开发团队其实就是在IPageLayout实现类中追加了一个方法~哎~什么遵循接口编程...
还发现他们写源代码注释文档喜欢抄一下就完事... 真是敷衍.