??xml version="1.0" encoding="utf-8" standalone="yes"?>91久久综合亚洲鲁鲁五月天,亚洲一级电影,国产精品久久久久精k8http://www.aygfsteel.com/stevech/襉K町学士关于Java的随便一说而已…?/description>zh-cnSun, 18 May 2025 21:46:42 GMTSun, 18 May 2025 21:46:42 GMT60走进JavaFX-(2)http://www.aygfsteel.com/stevech/archive/2008/12/16/246532.html襉K町学?/dc:creator>襉K町学?/author>Mon, 15 Dec 2008 17:05:00 GMThttp://www.aygfsteel.com/stevech/archive/2008/12/16/246532.htmlhttp://www.aygfsteel.com/stevech/comments/246532.htmlhttp://www.aygfsteel.com/stevech/archive/2008/12/16/246532.html#Feedback4http://www.aygfsteel.com/stevech/comments/commentRss/246532.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/246532.html话虽如此Q部分语法可能确实会造成一些理解困难,比如有的地方分隔W用逗号Q?Q分P;Q和I格都可以,def和var的区别,=>操作W,{等q些q得初看一遍语法才能理解(当然Q基本上没有必要看W二遍了吧)。因此,我也在此JavaFX的语法照着Sun的语?Tutorial快速地q一遍,Z后打下一个坚实(Q)的基Q呵c?nbsp; 阅读全文

]]>
走进JavaFX-(1u1)http://www.aygfsteel.com/stevech/archive/2008/12/12/246048.html襉K町学?/dc:creator>襉K町学?/author>Fri, 12 Dec 2008 14:42:00 GMThttp://www.aygfsteel.com/stevech/archive/2008/12/12/246048.htmlhttp://www.aygfsteel.com/stevech/comments/246048.htmlhttp://www.aygfsteel.com/stevech/archive/2008/12/12/246048.html#Feedback1http://www.aygfsteel.com/stevech/comments/commentRss/246048.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/246048.html 以前写了一个JavaFX入门例子Q但׃JavaFX正式版中变化较大Q那个例子已无法在正式版中运行,因此重写Q标题叫1u1Q也是遵守Sun的更新规范,代表update1Q呵?br /> 文:襉K町学?br /> */
08 q?2?日,Sun正式发布了JavaFX1.0。JavaFX在演q过E中发生了很多的变化Q因此,我以前写的JavaFX的第一? HelloWorld的例子已l无法在正式版下q行Q于是在q里重写那个例子。而新的API我也q没有开始学?fn),只好大略地浏览了一遍APIp草写, 因此Q这个例子虽然在1.0版下正确q行Q却未必是最适合的写法,以后如发现问题再来update2吧,呵呵……
正式版中很多包的命名有了天翻 地覆的变化,class的位|和名称很多也面目全非。比如GUIq块q历了由javafx.ui变化成javafx.gui再变化成 javafx.scene和javafx.application再进化成javafx.scene和javafx.stageQ而跟Swing相关的组 件也l统加上了Swing前缀。有的class我已l找不到了,比如以前的javafx.ui.MessageDialogQ我?.0中没有找到对应的 classQ只好直接叫用javax.swing.JOptionPane了。好了,废话不说了,贴新代码如下Q?br />
package sc.tmp;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.ext.swing.SwingButton;
import javax.swing.JOptionPane;

/**
 * 
@author stevech
 
*/
Stage {
    title: 
"Application title"
    width: 
250
    height: 
80
    scene: Scene {
        fill: Color.ORANGE
        content: SwingButton {
            text: 
"Click"
            action: function():Void {
                JOptionPane.showMessageDialog(
null"Have Fun!\nThis is your first JavaFX app!")
            }
            translateX: 
90 translateY: 10
        }
    }
    visible: 
true
}

l果如图Q?br />


]]>
走进JavaFX-(1)http://www.aygfsteel.com/stevech/archive/2008/07/18/intoJavaFX.html襉K町学?/dc:creator>襉K町学?/author>Fri, 18 Jul 2008 03:12:00 GMThttp://www.aygfsteel.com/stevech/archive/2008/07/18/intoJavaFX.htmlhttp://www.aygfsteel.com/stevech/comments/215700.htmlhttp://www.aygfsteel.com/stevech/archive/2008/07/18/intoJavaFX.html#Feedback6http://www.aygfsteel.com/stevech/comments/commentRss/215700.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/215700.html虽然是ȝQ我q是打算写详l一炏V本来我对JavaFX了解也不是很多,有的东西q要在网上查证了才能写(比较JavaFX是如何诞生,如何从F3变成 JavaFX的)。今天要写的主要是:1、JavaFX的前世今生;Q了解了它的历史也就了解了它是什么,它的发展方向Q呵呵)2、如何拥?JavaFXQ(知道从哪里去下蝲开发工P如何配置它)3、Hello JavaFX WorldQ当Ӟ一个经典的Hello World是不能少的)  阅读全文

]]>
NetBeans无好书[Z推荐两本Java书]http://www.aygfsteel.com/stevech/archive/2007/06/10/123268.html襉K町学?/dc:creator>襉K町学?/author>Sun, 10 Jun 2007 15:45:00 GMThttp://www.aygfsteel.com/stevech/archive/2007/06/10/123268.htmlhttp://www.aygfsteel.com/stevech/comments/123268.htmlhttp://www.aygfsteel.com/stevech/archive/2007/06/10/123268.html#Feedback1http://www.aygfsteel.com/stevech/comments/commentRss/123268.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/123268.html无责M?/span>Q无责Qq三个字Q在我这儿也差不多——西门町学士 (?

前两天逛书店,看到一本?font size="-1">_NNetBeans——Java桌面、Web、企业E序开?/font>?Q遂在书店里站了一个多时Q好厚啊Q书厚脸皮也厚)Q基本把q本书看了一遍,整体感觉失望Q内容完全配不上_NNetBeansq个标题。基本上是在NetBeans环境里写一些很单的JavaSE和JavaEE代码Q而且代码质量也很不高。像Web部分Qؓ了图单,在JSP面中写了大量的scriptletQ很不推荐开发h员看q种代码。这本书勉勉强强可以起名叫?font size="-1">初涉NetBeans》,看来要想更好地推介NetBeansQ还需要更多的技术作者的努力。什么时候NetBeans的书能跟Delphi的书媲美了,估计NetBeans的大业差不多定了吧Q呵?br>不管用什么IDEQ关键是看开发h员本人对语言和框架的功力Q这里也推介两本书,都是老书了,但内容基本不落伍Q提升功力更是不错?br>一本是:SwingQMatthew Robinson ?Pavel Vorobiev合写的,学士手上的很老了Q上个世U末的英文原版,但是真的非常非常l典Q国内应该有更新的中文版的,做Swing的一定要看,很不错?br>一 本关于JSP和Servlet斚w的,学士是从TSS下蝲的免费电(sh)子版QServlets and JavaServer Pages, The J2EE technology Web TierQJayson Falkner ?Kevin Jones合著Q(ZJ2EE4Q无JSF斚w内容Q,国内好像没有中文版的。这也是一本好书,Java Web入门与提升均应多L书?br>q两本书最大的特点是Q呵呵,用侯L(fng)话说Q叫深入出。在讲一个技术的同时Q也讲正的~码和设计方法,既能让一个新手从正门d入室Q也能让一个有l验的开发h员获得提升,以此大力推介之?img src ="http://www.aygfsteel.com/stevech/aggbug/123268.html" width = "1" height = "1" />

]]>
又说Eclipse与NetBeanshttp://www.aygfsteel.com/stevech/archive/2006/12/15/88064.html襉K町学?/dc:creator>襉K町学?/author>Fri, 15 Dec 2006 14:42:00 GMThttp://www.aygfsteel.com/stevech/archive/2006/12/15/88064.htmlhttp://www.aygfsteel.com/stevech/comments/88064.htmlhttp://www.aygfsteel.com/stevech/archive/2006/12/15/88064.html#Feedback4http://www.aygfsteel.com/stevech/comments/commentRss/88064.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/88064.html
Eclipse的阵营一向强大,最q又加入了一安量的公司:GoogleQ相形之下,NetBeans的阵营显得有炚w么“势单力薄”?br />我本人则׃对Swing的喜爱及对SWT的不喜爱Q一_从NB3.0以来Q用NetBeans?br />Q以前的NetBeans实不够好用Q徏个Projectq得先mount一下,典型的Unix思维Q双方这几年的发展,从架构和功能上来_现在NetBeans和Eclipse已经是大同小异,没有谁比谁牛×。对于developersQ用谁凭喜好?br />? 对于想通过q两个^台来赚钱的企业来_二者的区别可就太大了。看看Eclipse的阵营(双方的家长就不提了)QBEA, Borland, Intel, Sybase, Adobe, Oracle, Google, etc全是些IT届NB哄哄的大牛;再看看NetBeans的部队:一队的无名卒Q大名鼎鼎的也有QAmazonQ卖书的QeBayQ做生意的;HPQ? 卖PC的;q有卖手机的Q做开源的Q不一而Q感觉有Ҏ(gu)瓜裂枣似的。我q闷儿了:同样都是做Java IDE 的,受到的待遇区别咋p么大呢!何况像Borlandq样的本来JBuilder和NetBeans很相近Qؓ什么还得绕个弯儿去舔SWT的屁股? Q李E还在信心满满的说什?span style="font-weight: bold;">Java開發王?/span>Q反正我是不?img alt="" src="http://blog.csdn.net/Editor/FCKeditor/editor/images/smiley/msn/thumbs_down.gif" />Q?br />? 儿个感觉有点x白了QEclipse是搭个基本架子,剩下的这些公司在上面做自q东东然后可以拿d׃Q像MyEclipse、Borland? 是这么个xQ而NetBeans呢,Sun好像是把它定位成送给Developers的礼物(那里面装的当然就会是Sun所领导的Java技术,而不? 是那个觊觎者IBM的Java技术)QIDE free, Web pack free, mobility pack free, Enterprise pack free, {等{等通通freeQ免费大赠送,׃开发者当然是高兴了,既不要钱Q又是最新技术,q有个Sun盖的“正l”大章。可对于那些公司׃一样了Q老子? 的就是这饭Q你全送h了我喝西北风啊?q活不活啊我Q你以ؓ我像JBoss那样傻,不卖产品卖服务?JBoss不就是发现这饭不好吃才? Rickard Obergq个固不化的家伙给t出门的吗。所以这些公司才UL(fng)对NetBeansȝq远的,像见了娘亲一向扑向Eclipse的怀抱~~
不管怎么_我还是Swing的坚定支持者,支持SunQ支持NetBeansQ最后,感谢James GolsingQ感谢Groove CoverageQ我是边听God is A Girl一边码字儿的)Q感谢你的眼睛不辞辛力_看到q里Q?img src ="http://www.aygfsteel.com/stevech/aggbug/88064.html" width = "1" height = "1" />

]]>
数组的力?/title><link>http://www.aygfsteel.com/stevech/archive/2006/04/16/41384.html</link><dc:creator>襉K町学?/dc:creator><author>襉K町学?/author><pubDate>Sun, 16 Apr 2006 13:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/stevech/archive/2006/04/16/41384.html</guid><wfw:comment>http://www.aygfsteel.com/stevech/comments/41384.html</wfw:comment><comments>http://www.aygfsteel.com/stevech/archive/2006/04/16/41384.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stevech/comments/commentRss/41384.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stevech/services/trackbacks/41384.html</trackback:ping><description><![CDATA[    假如我们要精计一个很大的敎ͼ比如_256的阶乘(l果?00多位Q,怎么办?<br />你会_很好办啊Q从JDK 1.1起Java不是提供了一个java.math.BigInteger吗?不错Q用BigInteger实能解决问题。不q,如果没有Sunl的q个classQ仅仅靠Java最基本的那些类型,我们有没有办法来q行计算呢?{案是,肯定是能嘛,要不然在BigInteger之前怎么办?br />Ҏ(gu)之一是用数l来表示。比如说Q?br />                        int[] data = new int[100];<br />    我们知道Q一个int的最大gؓ2^31-1?147483647Q?0位)Q如果我们把q?00个intghQ我们就能表CZ?000位的数。这里我们就用这U方式来计算256的阶乘(256!Q?br />    我们先分?00个int的数l,׃是staticQ所以每个int的初始值都??br />    然后每个int表示6位数Q即最大gؓ999999。因为我们要做乘法,如果lint的位数过大,?位,那么999999999乘上一个数Q如100Q它的值就大于了int的max|造成溢出。所以int表示的位数需要根据需要仔l选择。(用long来表CZ同样需要仔l权衡位敎ͼ<br />    再定义一个num来表C我们占用的数组的int个数<br />    在乘法的时候,Ҏ(gu)个占用的int中的数都要乘Q然后一个一个地判断每个int中的值是不是出?位:<br />                        if (data[j]) > 1000000)<br />    如果出了则需要进位:<br />                        data[k+1] += data[k]/1000000;<br />                        data[k] %= 1000000;<br />一个个判断Q最后,如果最高位Q即data[num]Q中的数g过?位,我们需要占用一个新的intQ同样地q位Q当然也不要忘了lnum加一?br />                        if (data[num] > 1000000) num++;<br />    最后,我们的数组序输出卛_。在输出的时候需要小心的是,如果int中的值小?位,?5Q别忘了补上0Q即000025Q否则你会得到错误的{案的?br />    完整的代码如下:<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> tmp;<br /><br /></span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /> *<br /> * </span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);"> Stevech<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> BigNumbers {<br />    </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">[] data </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">];<br />    <br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"> Creates a new instance of BigNumers </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) {<br />        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> num </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 占用的个?/span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        data[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 0?的阶乘是1</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        <br />        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">257</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />            </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> j </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; j </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);"> num </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />                data[j] </span><span style="color: rgb(0, 0, 0);">*=</span><span style="color: rgb(0, 0, 0);"> i;        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Ҏ(gu)个int中的数都乘上 i</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">            }<br />            </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> j </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; j </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);"> num </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; j</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (data[j] </span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">) {<br />                    </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> k </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> j; k </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);"> num </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; k</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />                        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (data[num] </span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">) num</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br />                        data[k</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> data[k]</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">;    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> q位</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">                        data[k] </span><span style="color: rgb(0, 0, 0);">%=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1000000</span><span style="color: rgb(0, 0, 0);">;                  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> q位后的余数</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">                    }<br />                }<br />            }<br />        }<br />        System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">占用的int敎ͼ</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> (num</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\n|</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        System.out.print(data[num]);<br />        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> num</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);">></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; i</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">) {<br />            System.out.print(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> java.text.DecimalFormat(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">000000</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).format(data[i]));<br />        }<br />    }<br />}</span></div>输出l果为:<br /><font face="Courier New">占用的int敎ͼ85<br />|<br />85781777534284265411908227168123262515778152027948561985965565037726945255314<br />75893774402913604514084503758853423365843061571968346936964753222892884974260256<br />79637332563368786442675207626794560187968867971521143307702077526646451464709187<br />32610083287632570281898077367178145417025052301860849531906813825748107025281755<br />94594769870346657127381392862052347568082188607012036110831520935019474371091017<br />26968262861606263662435022840944191408424615936000000000000000000000000000000000<br />000000000000000000000000000000</font><br /><img src ="http://www.aygfsteel.com/stevech/aggbug/41384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stevech/" target="_blank">襉K町学?/a> 2006-04-16 21:19 <a href="http://www.aygfsteel.com/stevech/archive/2006/04/16/41384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTextField内容有效性验证几U方?/title><link>http://www.aygfsteel.com/stevech/archive/2006/04/09/40105.html</link><dc:creator>襉K町学?/dc:creator><author>襉K町学?/author><pubDate>Sun, 09 Apr 2006 08:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/stevech/archive/2006/04/09/40105.html</guid><wfw:comment>http://www.aygfsteel.com/stevech/comments/40105.html</wfw:comment><comments>http://www.aygfsteel.com/stevech/archive/2006/04/09/40105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stevech/comments/commentRss/40105.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stevech/services/trackbacks/40105.html</trackback:ping><description><![CDATA[ <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">在?/span> </font>Swing<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>JTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">Ӟ我们常常希望只接受那些符合我们要求的录入Q如数字、电(sh)话号码、邮政编码?/span></font>E-mail<font face="Lucida Sans Unicode"><span lang="zh-CN">{?/span></font>JFC<font face="Lucida Sans Unicode"><span lang="zh-CN">工作l在q方面也做了很多工作Q每一ơ新?/span></font>Java Se<font face="Lucida Sans Unicode"><span lang="zh-CN">发布Q往往都提供了新的、更方便和强大的有效性验证方式,在这里列丑ևU不同的验证方式?/span></font></p> <ul> <li> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">利用键盘和焦点事?/span> </font> </p> </li> </ul> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">q是最直觉的方式。利?/span> </font>KeyListener<font face="Lucida Sans Unicode"><span lang="zh-CN">来选择允许的字W,且添?/span></font>FocusListener<font face="Lucida Sans Unicode"><span lang="zh-CN">Q?/span></font></p> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">内容不符合要求时不允许焦点{UR这U方式很J琐Q?/span> </font>Sun<font face="Lucida Sans Unicode"><span lang="zh-CN">的徏议是不推荐用这U方式?/span></font></p> <ul> <li> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">使用自定义的</span> </font>Document</p> </li> </ul> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">我们知道Q?/span> </font>Swing<font face="Lucida Sans Unicode"><span lang="zh-CN">lg是基?/span></font>MVC<font face="Lucida Sans Unicode"><span lang="zh-CN">实现的?/span></font>JTextComponent<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>Model<font face="Lucida Sans Unicode"><span lang="zh-CN">是一个叫?/span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>Interface<font face="Lucida Sans Unicode"><span lang="zh-CN">Q我们可以通过限制</span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">的内Ҏ(gu)辑ֈ有效性验证的目的?/span></font>javax.swing.text<font face="Lucida Sans Unicode"><span lang="zh-CN">包中有多个不同的</span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">的实玎ͼ</span></font>JTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">使用的是</span></font>PlainDocument<font face="Lucida Sans Unicode"><span lang="zh-CN">。如果我们希?/span></font>JTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">只接受数字,可以实现我们特定?/span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">q之替换默认的</span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">Q?/span></font></p> <p style="margin-bottom: 0in;"> <br /> </p> <pre> package sdn;<br /><br /> import javax.swing.text.*;<br /><br /> public class IntegerDocument extends PlainDocument {<br /><br /> int currentValue = 0;<br /><br /> public int getValue() {<br /> return currentValue;<br /> }<br /><br /> public void insertString(int offset, String string,<br /> AttributeSet attributes) throws BadLocationException {<br /><br /> if (string == null) {<br /> return;<br /> } else {<br /> String newValue;<br /> int length = getLength();<br /> if (length == 0) {<br /> newValue = string;<br /> } else {<br /> String currentContent = getText(0, length);<br /> StringBuffer currentBuffer = <br /> new StringBuffer(currentContent);<br /> currentBuffer.insert(offset, string);<br /> newValue = currentBuffer.toString();<br /> }<br /> currentValue = checkInput(newValue, offset);<br /> super.insertString(offset, string, attributes);<br /> }<br /> }<br /> public void remove(int offset, int length)<br /> throws BadLocationException {<br /> int currentLength = getLength();<br /> String currentContent = getText(0, currentLength);<br /> String before = currentContent.substring(0, offset);<br /> String after = currentContent.substring(length+offset,<br /> currentLength);<br /> String newValue = before + after;<br /> currentValue = checkInput(newValue, offset);<br /> super.remove(offset, length);<br /> }<br /> public int checkInput(String proposedValue, int offset)<br /> throws BadLocationException {<br /> if (proposedValue.length() > 0) {<br /><strong> try {</strong><br /><strong> int newValue = Integer.parseInt(proposedValue);</strong><br /><strong> return newValue;</strong><br /><strong> } catch (NumberFormatException e) {</strong><br /><strong> throw new BadLocationException(proposedValue, offset);</strong><br /><strong> }</strong><br /> } else {<br /> return 0;<br /> }<br /> }<br /> }</pre> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">然后?/span> </font>IntegerDocument<font face="Lucida Sans Unicode"><span lang="zh-CN">L?/span></font>JTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">默认?/span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">Q?/span></font></p> <pre> package sdn;<br /><br /> import javax.swing.*;<br /> import javax.swing.text.*;<br /> import java.awt.*;<br /> import java.awt.event.*;<br /><br /> public class NumericInput {<br /> public static void main(String args[]) {<br /> Runnable runner = new Runnable() {<br /> public void run() {<br /> JFrame frame = new JFrame("Numeric Input");<br /> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /> frame.setLayout(new GridLayout(2, 2));<br /><br /> frame.add(new JLabel("Number"));<br /> JTextField fieldOne = new JTextField();<br /><strong> Document doc= new IntegerDocument();</strong><br /><strong> fieldOne.setDocument(doc);</strong><br /> frame.add(fieldOne);<br /><br /> frame.add(new JLabel("All"));<br /> JTextField fieldTwo = new JTextField();<br /> frame.add(fieldTwo);<br /><br /> frame.setSize(250, 90);<br /> frame.setVisible(true);<br /> }<br /> };<br /> EventQueue.invokeLater(runner);<br /> }<br /> }</pre> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">代码很简单,一目了然。这里说炚w外话Q?/span> </font>Sun<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>Swing Application<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>main<font face="Lucida Sans Unicode"><span lang="zh-CN">函数写法如上所C:先徏一?/span></font>Runnable<font face="Lucida Sans Unicode"><span lang="zh-CN">Q然后把q个</span></font>Runnable<font face="Lucida Sans Unicode"><span lang="zh-CN">攑ֈ</span></font>event-dispatch thread<font face="Lucida Sans Unicode"><span lang="zh-CN">中去执行。另外,以前有的</span></font>Developer<font face="Lucida Sans Unicode"><span lang="zh-CN">Q比如我Q喜Ƣ用</span></font>SwingUtilities.invokeLater(runner)<font face="Lucida Sans Unicode"><span lang="zh-CN">来将一?/span></font>thread<font face="Lucida Sans Unicode"><span lang="zh-CN">攑ֈ</span></font>event-dispatch thread<font face="Lucida Sans Unicode"><span lang="zh-CN">中,现在</span></font>Sun<font face="Lucida Sans Unicode"><span lang="zh-CN">也徏议用</span></font>EventQueue.invokeLater(runner)<font face="Lucida Sans Unicode"><span lang="zh-CN">Q因?/span></font>SwingUtilities<font face="Lucida Sans Unicode"><span lang="zh-CN">Ҏ(gu)版本仅仅是对</span></font>EventQueue<font face="Lucida Sans Unicode"><span lang="zh-CN">Ҏ(gu)版本的一个包装?/span></font></p> <ul> <li> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">?/span> </font>InputVerifier<font face="Lucida Sans Unicode"><span lang="zh-CN">来实?/span></font></p> </li> </ul> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">?/span> </font>J2SE 1.3<font face="Lucida Sans Unicode"><span lang="zh-CN">中加入了一个名?/span></font>InputVerifier<font face="Lucida Sans Unicode"><span lang="zh-CN">的抽象类Q可用于M</span></font>JComponent<font face="Lucida Sans Unicode"><span lang="zh-CN">。其中定义了</span></font>boolean verifiy(JComponent input)<font face="Lucida Sans Unicode"><span lang="zh-CN">Ҏ(gu)。如果组件中的文本是有效的,当焦点{ULQ如按下</span></font>Tab<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>Shift-Tab<font face="Lucida Sans Unicode"><span lang="zh-CN">Q,</span></font>verify<font face="Lucida Sans Unicode"><span lang="zh-CN">Ҏ(gu)q回</span></font>true<font face="Lucida Sans Unicode"><span lang="zh-CN">Q否则返?/span></font>false<font face="Lucida Sans Unicode"><span lang="zh-CN">Q得焦点仍停留在当前组件上。我们仍以数字ؓ例:</span></font></p> <pre> package sdn;<br /><br /> import java.awt.*;<br /> import java.awt.event.*;<br /> import javax.swing.*;<br /><br /> public class NumericVerifier{<br /> public static void main(String args[]) {<br /> Runnable runner = new Runnable() {<br /> public void run() {<br /> JFrame frame = new JFrame("Numeric Verifier");<br /> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /><br /> JPanel panel1 = new JPanel(new BorderLayout());<br /> JLabel label1 = new JLabel("Numeric-only");<br /> JTextField textField1 = new JTextField();<br /> panel1.add(label1, BorderLayout.WEST);<br /> panel1.add(textField1, BorderLayout.CENTER);<br /><br /> JPanel panel2 = new JPanel(new BorderLayout());<br /> JLabel label2 = new JLabel("Anything");<br /> JTextField textField2 = new JTextField();<br /> panel2.add(label2, BorderLayout.WEST);<br /> panel2.add(textField2, BorderLayout.CENTER);<br /><br /> JPanel panel3 = new JPanel(new BorderLayout());<br /> JLabel label3 = new JLabel("Numeric-only");<br /> JTextField textField3 = new JTextField();<br /> panel3.add(label3, BorderLayout.WEST);<br /> panel3.add(textField3, BorderLayout.CENTER);<br /><br /><strong> InputVerifier verifier = new InputVerifier() {</strong><br /><strong> public boolean verify(JComponent comp) {</strong><br /><strong> boolean returnValue;</strong><br /><strong> JTextField textField = (JTextField)comp;</strong><br /><strong> try {</strong><br /><strong> Integer.parseInt(textField.getText());</strong><br /><strong> returnValue = true;</strong><br /><strong> } catch (NumberFormatException e) {</strong><br /><strong> Toolkit.getDefaultToolkit().beep();</strong><br /><strong> returnValue = false;</strong><br /><strong> }</strong><br /><strong> return returnValue;</strong><br /><strong> }</strong><br /><strong> };</strong><br /><br /><strong> textField1.setInputVerifier(verifier);</strong><br /><strong> textField3.setInputVerifier(verifier);</strong><br /><br /> frame.add(panel1, BorderLayout.NORTH);<br /> frame.add(panel2, BorderLayout.CENTER);<br /> frame.add(panel3, BorderLayout.SOUTH);<br /> frame.setSize(300, 95);<br /> frame.setVisible(true);<br /> }<br /> };<br /> EventQueue.invokeLater(runner);<br /> }<br /> }</pre> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">q个例子的效果和上一个是不同的。自定义</span> </font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>App<font face="Lucida Sans Unicode"><span lang="zh-CN">中,用户会发现M非数字的字符都不会在</span></font>JTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">中出玎ͼ而在使用</span></font>InputVerifier<font face="Lucida Sans Unicode"><span lang="zh-CN">?/span></font>App<font face="Lucida Sans Unicode"><span lang="zh-CN">中,用户在录入字W时不会发现M异常Q但是当他确认录入完成后Q如果内容不W合有效性,焦点不会{U!q两U情况都可能让一个没有经验的用户茫然Q具体用哪一U是一个见仁见智的问题?/span></font></p> <ul> <li> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">使用</span> </font>Document Filter</p> </li> </ul> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">?/span> </font>J2SE 1.4<font face="Lucida Sans Unicode"><span lang="zh-CN">中,又加入了一个新的类Q?/span></font>DocumentFilter<font face="Lucida Sans Unicode"><span lang="zh-CN">。你无需再实C个新?/span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">Q而是对现有的</span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">qo一遍。它的结果与实现自定义的</span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">q无二样Q仅仅是思\不同而已?/span></font></p> <pre> package snd;<br /> import javax.swing.text.*;<br /> import java.awt.Toolkit; <br /><br /> public class IntegerDocumentFilter extends DocumentFilter {<br /><br /><br /> int currentValue = 0; <br /><br /> public IntegerDocumentFilter() {<br /> }<br /><br /> public void insertString(DocumentFilter.FilterBypass fb, <br /> int offset, String string, AttributeSet attr) <br /> throws BadLocationException { <br /><br /> if (string == null) {<br /> return;<br /> } else {<br /> replace(fb, offset, 0, string, attr);<br /> }<br /> } <br /><br /> public void remove(DocumentFilter.FilterBypass fb, <br /> int offset, int length)<br /> throws BadLocationException {<br /><br /> replace(fb, offset, length, "", null);<br /> }<br /><br /> public void replace(DocumentFilter.FilterBypass fb, <br /> int offset, int length, String text, AttributeSet attrs) <br /> throws BadLocationException { <br /><br /> Document doc = fb.getDocument();<br /> int currentLength = doc.getLength();<br /> String currentContent = doc.getText(0, currentLength);<br /> String before = currentContent.substring(0, offset);<br /> String after = currentContent.substring(<br /> length+offset, currentLength);<br /> String newValue = before + <br /> (text == null ? "" : text) + after;<br /> currentValue = checkInput(newValue, offset);<br /> fb.replace(offset, length, text, attrs);<br /> }<br /><br /> private int checkInput(String proposedValue, int offset)<br /> throws BadLocationException {<br /> int newValue = 0;<br /> if (proposedValue.length() > 0) {<br /> try {<br /> newValue = Integer.parseInt(proposedValue);<br /> } catch (NumberFormatException e) {<br /> throw new BadLocationException(<br /> proposedValue, offset);<br /> }<br /> }<br /> return newValue;<br /> }<br /> }</pre> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN">再将q个</span> </font>Filter<font face="Lucida Sans Unicode"><span lang="zh-CN">应用?/span></font>Document<font face="Lucida Sans Unicode"><span lang="zh-CN">Q?/span></font></p> <pre> package sdn;<br /> import javax.swing.*;<br /> import javax.swing.text.*;<br /> import java.awt.*;<br /><br /> public class NumericInputFilter {<br /> public static void main(String args[]) {<br /> Runnable runner = new Runnable() {<br /> public void run() {<br /> JFrame frame = new JFrame("Numeric Input Filter");<br /> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /> frame.setLayout(new GridLayout(2, 2));<br /><br /> frame.add(new JLabel("Number"));<br /> JTextField textFieldOne = new JTextField();<br /><strong> Document doc= textFieldOne.getDocument();</strong><br /><strong> DocumentFilter filterOne = </strong><strong>new IntegerDocumentFilter();</strong><br /><strong> ((AbstractDocument)</strong><strong>doc).setDocumentFilter(filterOne);</strong><br /><strong> textFieldOne.setDocument(doc);</strong><br /> frame.add(textFieldOne);<br /><br /> frame.add(new JLabel("All"));<br /> JTextField textFieldTwo = new JTextField();<br /> frame.add(textFieldTwo);<br /><br /> frame.setSize(250, 90);<br /> frame.setVisible(true);<br /> }<br /> };<br /> EventQueue.invokeLater(runner);<br /> }<br /> }</pre> <p style="margin-bottom: 0in;"> DocumentFilter<font face="Lucida Sans Unicode"><span lang="zh-CN">只能用于</span></font>Swing<font face="Lucida Sans Unicode"><span lang="zh-CN">中的?/span></font>text<font face="Lucida Sans Unicode"><span lang="zh-CN">有关的组Ӟ?/span></font>InputVerifier<font face="Lucida Sans Unicode"><span lang="zh-CN">可用于Q何组Ӟ。除了这几种Ҏ(gu)Q在对于</span></font>TextField<font face="Lucida Sans Unicode"><span lang="zh-CN">而言Q我们还?/span></font>JFormattedTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">Q很多时候用</span></font>JFormattedTextField<font face="Lucida Sans Unicode"><span lang="zh-CN">是非常Ҏ(gu)和简单的方式?/span></font></p> <p style="margin-bottom: 0in;"> <font face="Lucida Sans Unicode"> <span lang="zh-CN"> </span> </font> </p> 注:q篇文章基本Ҏ(gu)SDN的Core Java Tech Tips意译而来Q代码基本跟其一_另外q参考了M. Robinson & P. Vorobiev的Swing, Chapter 11<img src ="http://www.aygfsteel.com/stevech/aggbug/40105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stevech/" target="_blank">襉K町学?/a> 2006-04-09 16:26 <a href="http://www.aygfsteel.com/stevech/archive/2006/04/09/40105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tiger pitfallhttp://www.aygfsteel.com/stevech/archive/2006/03/16/35715.html襉K町学?/dc:creator>襉K町学?/author>Thu, 16 Mar 2006 14:03:00 GMThttp://www.aygfsteel.com/stevech/archive/2006/03/16/35715.htmlhttp://www.aygfsteel.com/stevech/comments/35715.htmlhttp://www.aygfsteel.com/stevech/archive/2006/03/16/35715.html#Feedback4http://www.aygfsteel.com/stevech/comments/commentRss/35715.htmlhttp://www.aygfsteel.com/stevech/services/trackbacks/35715.html在SDNt到一个Tiger的pitfallQ?br>package sdn;

import java.util.ArrayList;

public class BoxingEquality {
   
    /** Creates a new instance of BoxingEquality */
    public BoxingEquality() {
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int i = 1;
        int j = 1;
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(i);
        list.add(j);
        System.out.printf("It is %b that i == j.\n", (i==j));
        System.out.printf("It is %b that list.get(0) == list.get(1).\n", (list.get(0)==list.get(1)));
        System.out.printf("It is %b that list.get(0).equals(list.get(1)).",            list.get(0).equals(list.get(1)));
    } 
}

输出l果Z意料Q?br>It is true that i == j.
It is true that list.get(0) == list.get(1).    // WHY???
It is true that list.get(0).equals(list.get(1)).

然而,仅仅?i ?j 的值改?000Q?br>int i = 1000;
int j = 1000;
p一个改动后输出l果虽然W合了java的思维方式Q但在这个context中却更显得怪异Q?br>It is true that i == j.
It is false that list.get(0) == list.get(1). // Oops
It is true that list.get(0).equals(list.get(1)).

Sunl出的解释:
The primitives are equal and the values of the boxed ints are equal. But this time the ints point to different objects. What you have discovered is that for small integral values, the objects are cached in a pool much like Strings. When i and j are 2, a single object is referenced from two different locations. When i and j are 2000, two separate objects are referenced. Autoboxing is guaranteed to return the same object for integral values in the range [-128, 127], but an implementation may, at its discretion, cache values outside of that range. It would be bad style to rely on this caching in your code.

呵呵Q要不注意说不定q真中招了!

]]>
վ֩ģ壺 | | | | | | ˹| Ǹ| ϰ| Ϣ| | Դ| ³| ٸ| ɽ| Ϫ| | ¡| | | | ء| | ʦ| | | Ѩ| ˫| ֬| | żҴ| | ͩ®| | лͨ| ˫| ƽ| п| | | ʯ|