Welcome 微信登录

首页 / 软件开发 / JAVA

java的滑杆和进度指示条

java的滑杆和进度指示条

java的滑杆和进度指示条2007-05-29 yycnet.yeah.net yyc译滑杆用户能用一个滑块的来回移动来输入数据,在很多情况下显得很直观(如声音控制)。进程条从“空”到“满”显示相关数据的状态,因此用户得到了一个状态的透视。我最喜爱的有关这的程序例子简单地将滑动块同进程条挂接起来,所以当我们移动滑动块时,进程条也相应的改变://: Progress.java// Using progress ...
java的表格

java的表格

java的表格2007-05-29 yycnet.yeah.net yyc译和树状物一样,表格在Swing相当的庞大和强大。它们最初有意被设计成以Java数据库连结(JDBC,在15章有介绍)为媒介的“网格”数据库接口,并且因此它们拥有的巨大的灵活性,使我们不再感到复杂。无疑,这是足以成为成熟的电子数据表的基础条件而且可能为整本书提供很好的根据。但是,如果我们理解这个的基础条件,它同样可能创建相关的简单的Jtable。JTable控...
java的卡片式对话框

java的卡片式对话框

java的卡片式对话框2007-05-29 yycnet.yeah.net yyc译在本章的前部,向我们介绍了老式的CardLayout,并且注意到我们怎样去管理我们所有的卡片开关。有趣的是,有人现在认为这是一种不错的设计。幸运的是,Swing用JTabbedPane对它进行了修补,由JTabbedPane来处理这些卡片,开关和其它的任何事物。对比CardLayout和JTabbedPane,我们会发现惊人的差异。下面的程序例子十分的有趣,因为它利用了前面...
Swing更多的知识

Swing更多的知识

Swing更多的知识2007-05-29 yycnet.yeah.net yyc译这一节意味着唯一向我们介绍的是Swing的强大力量和我们的着手处,因此我们能注意到通过库,我们会感觉到我们的方法何等的简单。到目前为止,我们已看到的可能足够满足我们UI设计需要的一部分。不过,这里有许多有关Swing额外的情况——它有意成为一全功能的UI设计工具箱。如果我们没有发现我们所需要的,请到SUN公司的在线文件中去查找,并搜索WEB。这个方法几...
总结

总结

总结2007-05-29 yycnet.yeah.net yyc译对于AWT而言,Java 1.1到Java 1.2最大的改变就是Java中所有的库。Java 1.0版的AWT曾作为目前见过的最糟糕的一个设计被彻底地批评,并且当它允许我们在创建小巧精致的程序时,产生的GUI“在所有的平台上都同样的平庸”。它与在特殊平台上本地应用程序开发工具相比也是受到限制的,笨拙的并且也是不友好的。当Java 1.1版纳入新的事件模型和Java B...
练习

练习

练习2007-05-29 yycnet.yeah.net yyc译(1)创建一个有文字字段和三个按钮的程序片。当我们按下每个按钮时,使不同的文字显示在文字段中。(2)增加一个复选框到练习1创建的程序中,捕捉事件,并插入不同的文字到文字字段中。(3)创建一个程序片并增加所有导致action()被调用的组件,然后捕捉他们的事件并在文字字段中为每个组件显示一个特定的消息。(4)增加可以被handleEvent()方法测试事件的组件到练习3中。过载handleEv...
多线程

多线程

多线程2007-05-29 yycnet.yeah.net yyc译利用对象,可将一个程序分割成相互独立的区域。我们通常也需要将一个程序转换成多个独立运行的子任务。象这样的每个子任务都叫作一个“线程”(Thread)。编写程序时,可将每个线程都想象成独立运行,而且都有自己的专用CPU。一些基础机制实际会为我们自动分割CPU的时间。我们通常不必关心这些细节问题,所以多线程的代码编写是相当简便的。这时理解一些定义对以后的学习狠有帮助。&...
反应灵敏的用户界面

反应灵敏的用户界面

反应灵敏的用户界面2007-05-29 yycnet.yeah.net yyc译作为我们的起点,请思考一个需要执行某些CPU密集型计算的程序。由于CPU“全心全意”为那些计算服务,所以对用户的输入十分迟钝,几乎没有什么反应。在这里,我们用一个合成的applet/application(程序片/应用程序)来简单显示出一个计数器的结果://: Counter1.java// A non-responsive user interface...
从线程继承(java)

从线程继承(java)

从线程继承(java)2007-05-29 yycnet.yeah.net yyc译为创建一个线程,最简单的方法就是从Thread类继承。这个类包含了创建和运行线程所需的一切东西。Thread最重要的方法是run()。但为了使用run(),必须对其进行过载或者覆盖,使其能充分按自己的吩咐行事。因此,run()属于那些会与程序中的其他线程“并发”或“同时”执行的代码。下面这个例子可创建任意数量的线程,并通过为每...
针对用户界面的多线程

针对用户界面的多线程

针对用户界面的多线程2007-05-29 yycnet.yeah.net yyc译现在,我们也许能用一个线程解决在Counter1.java中出现的问题。采用的一个技巧便是在一个线程的run()方法中放置“子任务”——亦即位于go()内的循环。一旦用户按下Start按钮,线程就会启动,但马上结束线程的创建。这样一来,尽管线程仍在运行,但程序的主要工作却能得以继续(等候并响应用户界面的事件)。下面是具体的代码:...
用主类合并线程

用主类合并线程

用主类合并线程2007-05-29 yycnet.yeah.net yyc译在上面的例子中,我们看到线程类(Thread)与程序的主类(Main)是分隔开的。这样做非常合理,而且易于理解。然而,还有另一种方式也是经常要用到的。尽管它不十分明确,但一般都要更简洁一些(这也解释了它为什么十分流行)。通过将主程序类变成一个线程,这种形式可将主程序类与线程类合并到一起。由于对一个GUI程序来说,主程序类必须从Frame或Applet继承,所以必须用一个接口加入额外...
java制作多个线程

java制作多个线程

java制作多个线程2007-05-29 yycnet.yeah.net yyc译现在考虑一下创建多个不同的线程的问题。我们不可用前面的例子来做到这一点,所以必须倒退回去,利用从Thread继承的多个独立类来封装run()。但这是一种更常规的方案,而且更易理解,所以尽管前例揭示了我们经常都能看到的编码样式,但并不推荐在大多数情况下都那样做,因为它只是稍微复杂一些,而且灵活性稍低一些。下面这个例子用计数器和切换按钮再现了前面的编码样式。但这一次,一个特定计数...
Daemon线程

Daemon线程

Daemon线程2007-05-29 yycnet.yeah.net yyc译“Daemon”线程的作用是在程序的运行期间于后台提供一种“常规”服务,但它并不属于程序的一个基本部分。因此,一旦所有非Daemon线程完成,程序也会中止运行。相反,假若有任何非Daemon线程仍在运行(比如还有一个正在运行main()的线程),则程序的运行不会中止。通过调用isDaemon(),可调查一个线程是不是一个Daemon...
java资源访问的错误方法

java资源访问的错误方法

java资源访问的错误方法2007-05-29 yycnet.yeah.net yyc译现在考虑换成另一种方式来使用本章频繁见到的计数器。在下面的例子中,每个线程都包含了两个计数器,它们在run()里增值以及显示。除此以外,我们使用了Watcher类的另一个线程。它的作用是监视计数器,检查它们是否保持相等。这表面是一项无意义的行动,因为如果查看代码,就会发现计数器肯定是相同的。但实际情况却不一定如此。下面是程序的第一个版本://: Sharing1.jav...
Java如何共享资源

Java如何共享资源

Java如何共享资源2007-05-29 yycnet.yeah.net yyc译对一种特殊的资源——对象中的内存——Java提供了内建的机制来防止它们的冲突。由于我们通常将数据元素设为从属于private(私有)类,然后只通过方法访问那些内存,所以只需将一个特定的方法设为synchronized(同步的),便可有效地防止冲突。在任何时刻,只可有一个线程调用特定对象的一个synchronized方法(尽管那个...
回顾Java Beans

回顾Java Beans

回顾Java Beans2007-05-29 yycnet.yeah.net yyc译我们现在已理解了同步,接着可换从另一个角度来考察Java Beans。无论什么时候创建了一个Bean,就必须假定它要在一个多线程的环境中运行。这意味着:(1) 只要可行,Bean的所有公共方法都应同步。当然,这也带来了“同步”在运行期间的开销。若特别在意这个问题,在关键区域中不会造成问题的方法就可保留为“不同步”,但注意这通...
线程的状态

线程的状态

线程的状态2007-05-29 yycnet.yeah.net yyc译一个线程可以有四种状态:(1) 新(New):线程对象已经创建,但尚未启动,所以不可运行。(2) 可运行(Runnable):意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞&rdqu...
线程为何会堵塞

线程为何会堵塞

线程为何会堵塞2007-05-29 yycnet.yeah.net yyc译堵塞状态是前述四种状态中最有趣的,值得我们作进一步的探讨。线程被堵塞可能是由下述五方面的原因造成的:(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。(3) 用wait()暂停了线程...
<< 311 312 313 314 315 316 317 318 319 320 >>