Scratz's profileScratz 的小果园PhotosBlogListsMore ![]() | Help |
|
4/23/2007 处理文本字段事件 这次的客户端程序,按照上头的意思,不要对原版作过多的修改,所以参数设置组件几乎全部在主窗体上,尽管我不赞成这种做法。带来的一个问题就是,如何适当处理文本字段(JTextField)的事件?
在普通的程序中,文本字段基本上都位于单独的对话框中,通过单击“确定”按钮提交更改。但我这次却不能在主窗体中添加一个按钮来处理,一是美观问题,二是一共 6 个文本字段,3 行 2 列,也没有按钮的容身之处。
首先想到的是,向文本字段添加操作事件侦听器(ActionListener),这样就可以通过按下回车键提交更改,也正好在此时检查输入的有效性,如果无效就给出提示并恢复到输入前的值。这里顺便说一下有效性检查,除了我这样,也可以用格式化的文本字段(JFormattedTextField)限制输入。
但是 6 个文本字段都修改就要按 6 次回车键,好像很不方便,于是又想到了焦点侦听器(FocusListener),在当前编辑的文本字段失去焦点时提交更改。写好后,发现还是和预期有差距:要使文本字段失去焦点,不能单纯在外面点一下鼠标,而必须在另外的可获取焦点的组件(例如文本字段、组合框等)上或整个程序窗口外单击。这应该能通过适当的编程修正,但目前还没想出来。
现在有了两个侦听器,也算差强人意了。但在添加右键菜单时又出问题了,因为鼠标一放在右键菜单上,文本字段就失去焦点并提交更改了,所以最后还是忍痛去掉了右键菜单。
今天折腾下来,只能算凑合,再想想看吧。 4/22/2007 街上很多伸手要钱的人 一般的乞丐少了,如今到处都是“不治之症”、“哭诉无门”、“全家横祸”……人或昂首挺胸或低头不语,身前是打印或者用粉笔写在地上的“个人简历”,奢侈一点的还有个放音机重复着不痛不痒的“哀告”。
目前的部分结论是:如果里面有小孩(多半神志昏迷),那是被不良分子所控制逼迫;如果有老人,那是老江湖;如果有惨不忍睹的残疾人,那是化装;如果是健康的年轻人,还有什么好说的呢?可是有人明知道是骗子甚至歹徒还要给钱充好人,这就叫助纣为虐。
要整治打击不是不可能,但更要防止死灰复燃,教育“好心人”明辨是非。还有个昏招就是像某些西方国家一样把乞讨职业化,但不大可能在中国实施。
因此,问题最关键的地方还是在于,他们的目的只是钱,如果没人“施舍”,也就自然消亡了。 4/17/2007 《三国志》和《三国演义》的 100 个差别网上找到的,重新整理排版。
4/16/2007 “英雄”暮年 最近,两位上两个年代的动作巨星沉寂好多年后,携新片又出现在了银幕之上,先是“钢铁硬汉”希尔威斯特·史泰龙的《洛奇·巴尔博亚》,接着是“颓废英雄”布鲁斯·威利斯的《勇闯 16 街区》;两位还将分别推出经典动作片的续集《兰博 4》和《虎胆龙威 4》。
我不评价这两位的新片的好坏,我发现“英雄”似乎喜欢集中在某一个时代,接着世界沉寂很久,然后再次几乎涌现出一大批英雄。单从荧幕上看,动作片的“接班人”除了靠特技效果外,似乎很少有真材实料的。“功夫之王”李小龙很难再有了,“拼命三郎”成龙老了,“魔鬼司令”阿诺德·施瓦辛格沉迷于官场……还有导演,像乔治·卢卡斯、史蒂芬·斯皮尔伯格、詹姆斯·卡梅隆……还会在不远的将来再有吗?
“英雄”们都渐渐衰老,接班人却少之又少…… CDBurnerXP 新版 Stefan 宣布,CDBurnerXP 4.0 的第三个测试版已经交给 Flo 了,不久就会放出 Beta 版(只有捐款人才能下载)。一旦新的语言文件放出来,我就开始着手翻译。 4/15/2007 1992 年第二届 Ig 诺贝尔奖原文:http://www.improb.com/ig/ig-pastwinners.html#ig1992 医学 横滨资生堂研究中心的 F.·神田、E.·八木、M.·福田、K.·中岛、T.·太田和 O.·中田英寿,因为他们开拓性的研究工作:“对造成脚臭的化合物的阐释”,特别为他们的结论:自我感觉有脚气的人就会有,否则就没有。[发表在英国月刊《皮肤病学》,卷 122,6 号,1990 年 6 月,页码 771-6.] 考古学 法国先锋队,年轻的新教徒组,其名字的意思是“指路的人们”,莽撞的涂鸦清洁员,因为他们在法国布尼克村附近的梅内瑞斯岩洞,把墙上的古代绘画擦掉了。 经济学 伦敦劳埃德的投资商们,传承了 300 年枯燥的谨慎管理,因为他们为了保险灾害的大胆企图,而拒绝支付他们的公司的亏损。 生物学 塞西尔·雅各布森博士,坚韧而慷慨的精子捐献者,多产的精子银行元老,因为他创造了一套简单而独力的质量控制。[参见:“婴儿制造机:繁殖力骗子和塞西尔·雅各布森博士的堕落”] 化学 艾维特·巴萨,彩色果冻的制造者,因为她在二十世纪顶级化学成果中的角色——亮蓝色 Jell-O 果冻的合成。 物理学 戴维·乔雷和道格·鲍尔,低能物理学的名流,因为他们基于英国庄稼的几何状倒塌,而对力场理论循环论证式的贡献。 和平 达里尔·盖茨,洛杉矶市的前任警长,因为他那独特的把人们聚拢的强迫性方式。 营养学 罐头肉的使用者,即勇敢的罐头食品消费者,因为 54 年不分青红皂白的消化。 文学 尤利·斯特拉科夫,来自莫斯科的有机元素化合物研究所,因为他 1981 到 1990 年发表了 948 页科学论文,平均每 3.9 天就有一页多。 艺术 连带颁发给吉姆·诺尔顿,当代的文艺复兴人,因为他的经典解剖海报“动物王国的阴茎”,以及美国自然基金,因为其为鼓励诺尔顿先生拓展工作,而用在一本流行书的印版上的美工。 4/11/2007 刘邦还是项羽赢了? 前者小处不甚检点,大处能随机应变,终成帝业;后者霸气盖世,人无不闻风丧胆,最终却落得四面楚歌。自古以来,“成败论英雄”,但这次,刘邦成了流氓,项羽永远都是霸王。所谓的成败,随着历史而模糊了。
这就像两人各自为自己的“公平”而争执一样,不管对谁,一时的胜利只能带来一瞬的“扬眉吐气”,重要的是两人可能从此决裂。因此本着一颗“双赢”的心态,争取平和地讨论问题,才是解决之道——不论是目的,或仅仅是手段。 4/10/2007 我们如此努力,为了什么? 为了共产主义事业?别做梦了,理论中的最高境界至少不适合地球上的人类。
为了闯出一番事业而扬名?许多人都念念不忘地要“创业”,要向“成功的人”学习。在我看来,基本上还是为了多挣钱。如果事业成功后还是穷光蛋,那几乎没有人去做;反之则蜂拥而上。对声称“不为名不为利”的人,先看看其家产再作评论。
为了幸福快乐地过一辈子?这大概是多数“平民”的“奢望”了。但实际的生活往往不如人意,担心的坏事偏偏就时常发生,除了“豁达”之外,也没什么对策了。
人们都说一个字:累。为什么累?为了不再累而累。 为什么要按两次按钮才能关闭或隐藏一个窗口? 这次的项目中我遇到了这个问题。百思不得其解之后当然是上网找答案。网上关于这问题的话题不多,有些解释比较复杂,略过。解决问题最好从简单的地方入手——一个低级错误往往导致半天的冥思苦想。最简单的解释是,窗口被显示了两次。我仔细查看窗口显示代码,果然调用了两次 setVisible(true),去掉一个就正常了。为什么会这样呢?我查看了一下 JDK 源代码,setVisible 方法在开头就检查了参数,按理说不应该在第二次调用的时候起作用,难道是某个潜在的 API 错误?又另写一个小程序,两此调用 setVisible(true),结果却只按一次键就能关闭。看样子问题不简单。结论就是,编程应该有良好的规划和风格,否则可能导致莫名其妙的错误。
据说 Windows 程序也存在类似问题,还没有测试过。 4/9/2007 用 NetBeans 开发一个具有 Windows XP 外观风格的最简单程序 - 其三 新建一个 Makefile,比如叫做 MakeMe.mk……嗯,比如叫做 MyMakefile.mk,内容如下:
上面有些行以八个空格开头,实际上该是一个制表符,写成这样是因为共享空间会自动把制表符换成一个空格。NetBeans 本来有个 Makefile 向导,但我觉得不好用且弹性小,不如自己保存一个样本。把这个文件添加进项目,然后在上面右键选 Make,然后就收工了。 4/8/2007 用 NetBeans 开发一个具有 Windows XP 外观风格的最简单程序 - 其二 在工具栏上的组合框里,我们把项目配置为 Realease。在项目节点上右键选择属性,然后:转到 C/C++ → GNU C Compiler 节点,在 General 中钩选 Strip Symbols,在 Command Line 中设置 Addtional Options 为 -mno-cygwin -mwindows;转到 Linker → Libraries,单击 Libraries 右边的一栏,接着单击 Add Option,设置 Other Option 为 -lcomctl32。
如果我们直接在项目节点上右键选择 Build Project,则会输出以下错误:
结构体 INITCOMMONCONTROLSEX 在 commctrl.h 中声明,commctrl.h 位于 cygwin\usr\include\w32api。打开这个头文件,查找 INITCOMMONCONTROLSEX,发现它包含在一段预处理指令中:
再查找 _WIN32_IE,找到:
#if 0 表明,默认情况下,永远不会定义 _WIN32_IE。于是注释掉行 1 和行 3,再编译,再次出错:
像上面一样去查找 ICC_STANDARD_CLASSES,这次我们要把 windef.h 中的 WINVER 改为 0x0501。不必担心我们改了这些值会带来什么坏处。这些变量存在的意义是定义或不定义一些 API,以便为不同版本的 Windows 开发程序。如今 Windows Vista 已经出来了,世界进步很快,有新东西为什么不用呢?
现在编译运行,不会出错了。但是外观风格仍然是 98/2000 那种老土样式,这是因为默认情况下 NetBeans 不知道如何编译 rc 文件。解决这一问题的办法,最好是自定义一个 Makefile。
哦,也差不多了吧,今天到此为止,明天继续。 用 NetBeans 开发一个具有 Windows XP 外观风格的最简单程序 - 其一 首先创建一个名为 WinHello 的项目,在 Source Files 节点下新建 WinHello.c,代码的内容如下:
注意末尾处最好再加上一个回车符,因为我们将用 GCC 来编译,遵循 UNIX 的规矩总是好的。行 6~9 指明用 Windows XP 外观风格初始化程序,但这还不够,我们还需要一个资源脚本和一个清单文件来显示调用 Comctl32.dll 版本 6(默认状态下自动调用版本 5,也就是 Windows 98/2000 的外观风格)。在 Resource Files 节点下新建资源脚本 resource.rc 和清单文件 WinHello.exe.manifest。resource.rc 的内容如下:
WinHello.exe.manifest 的内容如下:
到现在为止,所有的源文件都准备好了,接下来是编译。为避免一篇文章过长,且看下回分解。 4/7/2007 工具准备 既然是本行,也没必要回避了。
以下是我用到的有关开发的基本工具:
|
|
|