??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
<a title="雨伞指数" target="_blank" href="#"></a>
<span style="#">
不带?br />
</span>
</section>
在上面代码中Q我们首先需要查扑ֱ性title=”雨伞指数"的节点,Xpath写法?//a[@title='雨伞指数']",然后需要找到父节点Q父节点标识为parent,Xpath的写法ؓ“//a[@title='雨伞指数']/parent::section”Qsection表示点ؓSection节点?br />然后需要查子点Span下的文本内容Q完整的写法?#8220;//a[@title='雨伞指数']/parent::section/span/text()”
]]>
public static void main(String[] args) {
final Controller controller = ControllerFactory.createCachingPooling(IDocumentSource.class);
//创徏需要处理的属性对?/span>
final Map<String, Object> attributes = Maps.newHashMap();
//需要处理的文档集合
List<Document> documents = SampleDocumentData.DOCUMENTS_DATA_MINING;
//文档添加到聚类属性中
CommonAttributesDescriptor.attributeBuilder(attributes).documents(documents);
//讄处理的语aQ)
MultilingualClusteringDescriptor.attributeBuilder(attributes).defaultLanguage(LanguageCode.CHINESE_SIMPLIFIED);
//讄需要处理的对象Q以及聚cȝ法
final ProcessingResult englishResult = controller.process(attributes, LingoClusteringAlgorithm.class);
//获取l果Q打印聚cM题及兌信息
final List<Cluster> clustersByTopic = englishResult.getClusters();
System.out.println("=======聚类主题=====");
for(Cluster cluster : clustersByTopic){
System.out.println("【主?nbsp;? +cluster.getLabel());
List<Document> cDocLst = cluster.getAllDocuments();
for(Document doc : cDocLst){
System.out.println("--------" + doc.getTitle());
}
}
//通过URLq行聚类
final ProcessingResult byDomainClusters = controller.process(documents, null,ByUrlClusteringAlgorithm.class);
final List<Cluster> clustersByDomain = byDomainClusters.getClusters();
System.out.println("=======URL聚类=======");
for(Cluster cluster : clustersByDomain){
System.out.println("【URL? +cluster.getLabel());
List<Document> cDocLst = cluster.getAllDocuments();
for(Document doc : cDocLst){
System.out.println("----" + doc.getTitle());
}
}
}
}
]]>
]]>
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>kubpwl</display-name>
<module>
<web>
<web-uri>kubpwl.war</web-uri>
<context-root>kubpwl</context-root>
</web>
</module>
</application>
<!--weblogic-version:10.3.6-->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:prefer-application-packages>
<wls:package-name>org.aspectj.weaver.tools.*</wls:package-name>
<wls:package-name>javax.jws.*</wls:package-name>
</wls:prefer-application-packages>
</wls:weblogic-application>
prefer-application-packages 表示优先加蝲目lib下的包?img src ="http://www.aygfsteel.com/aoneany/aggbug/383962.html" width = "1" height = "1" />
]]>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<context:annotation-config/>
<context:component-scan base-package="com.*.server.resource"></context:component-scan>
<!-- 登陆服务 -->
<jaxws:endpoint
id="LoginService"
implementor="com.*.ws.LoginService"
address="/ILoginService" >
</jaxws:endpoint>
</beans>
]]>
需要?div style="display: inline-block; ">ActionFactory.SAVE,ActionFactory.SAVE_ALL变ؓ可用状态,只需要设|编辑器EditorPart的isDirty()Ҏq回为true卛_?br /> ActionFactory.SAVE_AS讄~辑器EditorPart的iisSaveAsAllowed()为true卛_?br /> 但是ActionFactory.DELETE需要其他视图或~辑器中注册全局的句柄,可以通过如下Ҏ使用editorSite.getActionBars().setGlobalActionHandler(
]]>
]]>
@Override
public User unmarshal(TO to) throws Exception {
return (User)to;
}
@Override
public TO marshal(User user) throws Exception {
return (TO)user;
}
}
public interface TypeConvert {
@WebMethod
@XmlJavaTypeAdapter(UserTOAdapter.class)
User addUser(User user);
}
]]>
表示加蝲/WEB-INF/下所有以-servlet.xmll尾的xml文g
15原码: 00000000 00000000 00000000 00001111 //32?二进?br />
反码Q? 11111111 11111111 11111111 11110000 //0?,1变O
补码Q? 11111111 11111111 11111111 11110001 //最后位?,-15二进?br />
右移2位: 11111111 11111111 11111111 11111100 //双丢弃2?前面30位保?左边?
取反Q?nbsp; 00000000 00000000 00000000 00000011 //0?,1变O
Q1: 3+1
l果: Q-Q?//负号保留,十进?/p>
带符号左U?? 10 << 2 = 40
10 补码: 00000000 00000000 00000000 00001010 //32?二进?br />
左移2? 00000000 00000000 00000000 00101000 //左边丢弃2?双?
l果: 40 //十进?/p>
无符号右U?题:Q?321 >>> 30 = 3
4321原码: 00000000 00000000 00010000 11100011 //32?二进?br />
反码Q? 11111111 11111111 11101111 00011100 //0?,1变O
补码Q? 11111111 11111111 11101111 00011101 //最后位?,-4321二进?br />
无符号右U?0位: 00000000 00000000 00000000 00000011 //双丢弃30?前面二位保留,左边?
l果: 3 //十进?/p>
& 位逻辑?题:44 & 21 = 4
44 补码: 00000000 00000000 00000000 00101100 //32?二进?br />
21 补码: 00000000 00000000 00000000 00010101 //32?二进?br />
& q算: 00000000 00000000 00000000 00000100 //对应的两个二q制位均??l果位才? 否则?
l果: 4 //十进?nbsp;
| 位逻辑?题:9 | 5 = 13
9 补码: 00000000 00000000 00000000 00001001 //32?二进?br />
5 补码: 00000000 00000000 00000000 00000101 //32?二进?br />
| q算: 00000000 00000000 00000000 00001101 //对应的二个二q制位有一个ؓ1Ӟl果位就?
l果: 13 //十进?
^ 位逻辑异或 ? 9 ^ 5 = 12
9 补码: 00000000 00000000 00000000 00001001 //32?二进?br />
5 补码: 00000000 00000000 00000000 00000101 //32?二进?br />
| q算: 00000000 00000000 00000000 00001100 //对应的二q制位相异时Q结果ؓ1
l果: 12 //十进?/p>
~ 位逻辑?? ~9 = -10
9 补码: 00000000 00000000 00000000 00001001 //32?二进?br />
~ q算: 11111111 11111111 11111111 11110110 //最高位?表示Z个负?则进行取反加1
取反: 00000000 00000000 00000000 00001001 //32?二进?br />
Q1: 9+1 //32?二进?br />
l果: -10 //十进?/p>
在计机pȝ中,数g律用补码来表C(存储Q?br />
主要原因Q用补码,可以符号位和其它位l一处理Q同Ӟ减法也可按加法来处理。另外,两个用补
码表C的数相加时Q如果最高位Q符号位Q有q位Q则q位被舍弃?br />
补码与原码的转换q程几乎是相同的?br />
数值的补码表示也分两种情况Q?br />
Q?Q正数的补码Q与原码相同?br />
例如Q?9的补码是00001001?br />
Q?Q负数的补码Q符号位?Q其余位数绝对值的原码按位取反Q然后整个数??br />
例如Q?7的补码:因ؓ是负敎ͼ则符号位?#8220;1”,整个?0000111Q其?位ؓ-7的绝对?7的原?br />
0000111按位取反?111000Q再?Q所?7的补码是11111001?br />
已知一个数的补码,求原码的操作分两U情况:
Q?Q如果补码的W号位ؓ“0”Q表C是一个正敎ͼ所以补码就是该数的原码?br />
Q?Q如果补码的W号位ؓ“1”Q表C是一个负敎ͼ求原码的操作可以是:W号位ؓ1Q其余各位取反,然后再整个数??br />
例如Q已知一个补码ؓ11111001Q则原码?0000111Q?7Q:因ؓW号位ؓ“1”Q表C是一个负敎ͼ所以该位不变,仍ؓ“1”Q其??111001取反后ؓ0000110Q再?Q所以是10000111?
转蝲Q?a >http://blog.csdn.net/zjp8023/archive/2009/05/29/4224121.aspx
float
?double
Q以及与它们对应的包装类 Float
?Double
。它们都依据 IEEE 754 标准Q该标准?32 位Q点和 64 位双_ֺ点二进制小数定义了二进制标准?
IEEE 754 用科学记数法以底Cؓ 2 的小数来表示点数。IEEE 点数用 1 位表C数字的W号Q用 8 位来表示指数Q用 23 位来表示数Q即数部分。作为有W号整数的指数可以有正负之分。小数部分用二进Ӟ底数 2Q小数来表示Q这意味着最高位对应着??(2 -1)Q第二位对应着 ?(2 -2)Q依此类推。对于双_ֺ点敎ͼ?11 位表C指敎ͼ52 位表C尾数。IEEE 点值的格式如图 1 所C?
因ؓ用科学记数法可以有多U方式来表示l定数字Q所以要规范化QҎQ以便用底数?2 q且数点左边ؓ 1 的小数来表示Q按照需要调节指数就可以得到所需的数字。所以,例如Q数 1.25 可以表示为尾Cؓ 1.01Q指Cؓ 0Q?(-1) 0*1.01 2*2 0
?10.0 可以表示为尾Cؓ 1.01Q指Cؓ 3Q?(-1) 0*1.01 2*2 3
一个十q制数能否用二进制QҎ_表示Q关键在于小数部分。我们来看一个最单的数能否_表示。按照乘?取整C的方法,有:
得到一个无限@环的二进制小?img title="Q{QIEEE754" border="0" alt="Q{QIEEE754" src="http://www.cnblogs.com/images/cnblogs_com/bossin/WindowsLiveWriter/IEEE754_B489/clip_image020.gif" width="177" height="24" real_src="http://www.cnblogs.com/images/cnblogs_com/bossin/WindowsLiveWriter/IEEE754_B489/clip_image020.gif" />Q用有限位无法表C无限@环小敎ͼ因此Q?img title="Q{QIEEE754" border="0" alt="Q{QIEEE754" src="http://www.cnblogs.com/images/cnblogs_com/bossin/WindowsLiveWriter/IEEE754_B489/clip_image016%5B1%5D.gif" width="44" height="24" real_src="http://www.cnblogs.com/images/cnblogs_com/bossin/WindowsLiveWriter/IEEE754_B489/clip_image016%5B1%5D.gif" />无法用IEEE 754点数精表C。从中也可以看到Q由?/p>
Q?/p>
q四个数也无法精表C。同理:
也无法用IEEE 754点数精表C?/p>
在以0.1~0.9l尾?个小CQ只?.5可以_表示Q(如)Q而其他均无法q行_转换?/p>
上次只测试查询的性能Q而且都是在最优的情况下进行,没有考虑条他情况Q这ơ重C改了试用例Q把整个试的各个过E描q出来(加蝲Q排序,查找的效率)?/span>
场景Q?/span>随机生成5百万条不同的记录Q而每条记录不存在相同的情c现在将q?/span>5百万条记录在不同的情况下q行试。测试结果如?/span>
1?/span>5百万条记录,d查询50万次Q查询前50万条记录Q?/span>
数组性能试加蝲p:6.11
U?/span>数组性能试排序p:18.313
U?/span>数组性能试查找p:3.297
U?/span>数组性能试p?/span>:27.72U?/span>
数组性能试d?/span>:100005888 字节
RBTree性能试加蝲p:53.644
U?/span>RBTree性能试查找p?/span>:2.86U?/span>
RBTree性能试p?/span>:56.504U?/span>
RBTREE性能试共占?/span>:240004864 字节
MAP性能试加蝲p:7.282
U?/span>MAP性能试查找p:0.11
U?/span>MAP性能试p?/span>:7.392U?/span>
MAP性能试 共占?/span>:173554048 字节
2?/span>5百万条记录,d查询5百万ơ(每条记录查询一ơ)
数组性能试加蝲p:6.078
U?/span>数组性能试排序p:17.642
U?/span>数组性能试查找p:33.049
U?/span>数组性能试p?/span>:56.769U?/span>
数组性能试d占用 = 100005552
字节RBTree性能试加蝲p:54.8U?/span>
RBTree性能试查找p?/span>:34.581U?/span>
RBTree性能试p?/span>:89.381U?/span>
RBTREE性能试共占?/span> = 240005024 字节
MAP性能试加蝲p:6.501U?/span>
MAP性能试查找p:0.937U?/span>
MAP性能试p?/span>:7.438U?/span>
MAP性能试 共占?/span>=173553888 字节
3?/span>5百万条记录,d查询5千万ơ(每条数据查询10ơ)
数组性能试加蝲p:6.11U?/span>
数组性能试排序p:17.861U?/span>
数组性能试查找p:331.224U?/span>
数组性能试p?/span>:355.195U?/span>
数组性能试d占用:99990456字节
RBTree性能试加蝲p:53.097U?/span>
RBTree性能试查找p?/span>:345.866U?/span>
RBTree性能试p?/span>:398.963U?/span>
RBTREE性能试共占?/span> = 240005248 字节
MAP性能试加蝲p:7.235U?/span>
MAP性能试查找p:9.375U?/span>
MAP性能试p?/span>:16.61U?/span>
MAP性能试共占?/span>:173554048字节
试文g地址Q?nbsp; /Files/aoneany/search2.rar
================================================================
前面的测试算法中Q有一个地方偷懒(直接使用String.CompareToҎq行比较Q导致查询效率很差,现在对其q行优化Q测试后的数据ؓQ?/span>
5百万条记录,d查询5百万ơ(每条记录查询一ơ)
数组性能试加蝲p:1.016U?/span>
数组性能试排序p:14.485U?/span>
数组性能试查找p:0.703U?/span>
数组性能试p?/span>:16.204U?/span>
RBTree性能试加蝲p:20.705U?/span>
RBTree性能试查找p?/span>:3.75U?/span>
RBTree性能试p?/span>:24.455U?/span>
MAP性能试加蝲p:3.875U?/span>
MAP性能试查找p:1.516U?/span>
MAP性能试p?/span>:5.391U?/span>
Scanner扫描字符串对象?/p>
备注Q?/p>
在java~译好的class文g?有个区域UCؓConstant Pool,他是一个由数组l成的表,cd
为cp_info constant_pool[],用来存储E序中用的各种帔R,包括Class/String/Integer{各
U基本Java数据cd,详情参见The Java Virtual Machine Specification 4.4章节.
对于Constant Pool,表的基本通用l构?
cp_info {
u1 tag;
u1 info[];
}
tag是一个数?用来表示存储的常量的cd,例如8表示Stringcd,5表示Longcd,info[]Ҏ
cd码tag的不同会发生相应变化.
对于Stringcd,表的l构?
CONSTANT_String_info {
u1 tag;
u2 string_index;
}
tag固定?,string_index是字W串内容信息,cd?
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
tag固定?,length为字W串的长?bytes[length]为字W串的内?
代码样例
(以下代码在jdk6中编?
Z详细理解Constant Pool的结?我们参看一些代?
String s1 = "sss111";
String s2 = "sss222";
System.out.println(s1 + " " + s2);
׃"sss111"?/span>"sss222"都是字符串常?在编译期已l创建好了存储在class文g?
在编译后的class文g中会存在q?个常量的对应表示:
08 00 11 01 00 06 73 73 73 31 31 31 08 00 13 01 ; ......sss111....
00 06 73 73 73 32 32 32 ; ..sss222
Ҏ上面说的String帔Rl构,我们分析一?br />
开始的08为CONSTANT_String_infol构中的tag,?1应该是它的相对引?01?br />
CONSTANT_Utf8_info的tag,06为对应字W串的长?73 73 73 31 31 31为字W串?br />
应的~码,接着分析,会发现后面的是对?/span>"sss222"的存储结?
l过上面分析,我们知道?1?3是两个字W串的相对引?可以修改class文g
来修Ҏ印的内容,把class文g中的
00 6E 00 04 00 03 00 00 00 24 12 10 4C 12 12 4D
Ҏ
00 6E 00 04 00 03 00 00 00 24 12 10 4C 12 10 4D
E序׃输出sss111 sss111,而不是和原程序一栯出sss111 sss222,因ؓ?br />
们把?/span>"sss222"的相对引?2Ҏ了对"sss111"的相对引?0.
------------分割U?br />
public class Test {
public static void main(String[] args) {
String s1 = "sss111";
String s2 = "sss111";
}
}
在上面程序中存在2个相同的帔R"sss111",对于n个值相同的String帔R,在Constant Pool?br />
只会创徏一?所以在~译好的class文g?我们只能扑ֈ一个对"sss111"的表C?
000000abh: 08 00 11 01 00 06 73 73 73 31 31 31 ; ......sss111
在程序执行的时?Constant Pool会储存在Method Area,而不是heap?
另外,对于""内容为空的字W串帔R,会创Z个长度ؓ0,内容为空的字W串攑ֈConstant Pool?
而且Constant Pool在运行期是可以动态扩展的.
关于Stringcȝ说明
1.String使用private final char value[]来实现字W串的存?也就是说String对象创徏之后,׃?br />
再修Ҏ对象中存储的字符串内?是因ؓ如此,才说Stringcd是不可变?immutable).
2.StringcL一个特D的创徏Ҏ,是使用""双引h创徏.例如new String("i am")实际创徏??br />
String对象,一个是"i am"通过""双引号创建的,另一个是通过new创徏?只不q他们创建的时期不同,
一个是~译?一个是q行?/span>!
3.java对Stringcd重蝲?/span>+操作W?可以直接使用+对两个字W串q行q接.
4.q行期调用Stringcȝintern()Ҏ可以向String Pool中动态添加对?
String的创建方?/strong>
一般有如下几种
1.直接使用""引号创徏.
2.使用new String()创徏.
3.使用new String("someString")创徏以及其他的一些重载构造函数创?
4.使用重蝲的字W串q接操作W?/span>+创徏.
面试?
String s1 = new String("s1") ;
String s2 = new String("s1") ;
上面创徏了几个String对象?
{案:3?,~译期Constant Pool中创??q行期heap中创??
在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes 和PageAttributes两个c设定工E和面的属性时发生了一些额外的改变。随着J2SE1.3的发布,打印功能相应的得C完善Q但是在混合使用q两U完全不同的打印机制的时候仍然存在一些问题。比如,q两U机制用java.awt.Graphicsq个cȝ一个接口来展现打印内容Q意味着所有要打印的东襉K必须用一张图片表C。另外,完善的PrintJob提供了很有限的工E相兛_性的讄Q这两种机制都没有办法通过E序来选择目标打印机?
Java打印最大的改变来自于J2SE1.4的发布带来的Java打印服务API。这个第三代Java打印支持接口H破了先前提到的局限性。因为新的API是以前两种旧的打印机制定义的功能函数的一个父集?
下面是我通过q些API写的定位打印CZ代码Q希望对用java实现打印的朋友有一定的帮助Q?
在CentOS4.4Qjdk1.6下测试通过?
回答一:如果在application上有哪个component׃事g的触发而发生变化(比如QŞӞ的话Q这个方法就是用来更新当前程序的界面用的Q就相当于重M下界?
回答?The original author comments, very clear:
JSpinner spinner = new JSpinner(new SpinnerNumberModel(value, min, max, 1));
spinner.setBounds(x,y,width,height);
// 控制输入
JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner, "0");
spinner.setEditor(editor);
JFormattedTextField textField = ((JSpinner.NumberEditor) spinner.getEditor())
.getTextField();
textField.setEditable(true);
DefaultFormatterFactory factory = (DefaultFormatterFactory) textField
.getFormatterFactory();
NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter();
formatter.setAllowsInvalid(false);
add(spinner);
q样输入׃可以输入字母了,因ؓ讄了输入格式。超q范围的数g是输入不q去的?br />
其他的格式都应该是类似的吧,呵呵?br />
只不q这里用的是NumberFormatter Q还有其他类型的?/p>
转蝲Q?a >http://yangke1120.spaces.live.com/blog/cns!77b62010246eabc6!168.entry
如果是通过JDBC的话Q在d该字D|用getLong()来读取,或者用getObject()然后调用其toString()函数卛_?nbsp;
如果是用Hibernate的话Q在映射文g中将该字D|成Long或Integer卛_?/span>
new java.text.DecimalFormat("########").format(12345678)
转自:http://www.aygfsteel.com/hclown/articles/24383.html
严重: Exception starting filter struts2
java.lang.IllegalArgumentException: Wrong type at constant pool index
at sun.reflect.ConstantPool.getClassAt0(Native Method)
at sun.reflect.ConstantPool.getClassAt(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(Unknown Source)
at java.lang.reflect.Method.declaredAnnotations(Unknown Source)
at java.lang.reflect.Method.getAnnotation(Unknown Source)
at java.lang.reflect.AccessibleObject.isAnnotationPresent(Unknown Source)
at org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:161)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:259)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
E序
原URLQ?a href="http://servername?country">http://servername?country=中国
转码后的URLQhttp://servername?country=%E4%B8%AD%E5%9B%BD&
File buildFile = new File("build.xml"); Project p = new Project(); DefaultLogger consoleLogger = new DefaultLogger(); consoleLogger.setErrorPrintStream(System.err); consoleLogger.setOutputPrintStream(System.out); consoleLogger.setMessageOutputLevel(Project.MSG_INFO); p.addBuildListener(consoleLogger); try { p.fireBuildStarted(); p.init(); ProjectHelper helper = ProjectHelper.getProjectHelper(); helper.parse(p, buildFile); p.executeTarget(p.getDefaultTarget()); p.fireBuildFinished(null); } catch (BuildException e) { p.fireBuildFinished(e); }
JDesktopPane desktop = new JDesktopPane ();
.
JScrollPane scrollpane = new JScrollPane(desktop,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(scrollpane);
但是一q行Q但内部H口Ud到边界外ҎQ我们预想中的滚动条q没有出玎ͼ怎么办?原来QJDesktopPane 加到JScrollPane后其大小只是JScrollPane的viewport的大,所以滚动条q没有出现。所以我们要惛_法让JDesktopPane 的Viewport的大跟随内部窗口的位置而改变大,l承一个JDesktopPane 吧:
/**
* @author Turbo Chen
* @version 1.01
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JDesktop extends JDesktopPane{
public void paint(Graphics g){
super.paint(g);
Dimension d = preferredSizeOfAllFrames();
this.setPreferredSize(d);
this.revalidate();
}
/**
* @return q回最佳desktop寸..
*/
public Dimension preferredSizeOfAllFrames(){
JInternalFrame [] array = getAllFrames();
int maxX = 0;
int maxY = 0;
for (int i = 0; i < array.length; i++){
if ( array[ i ].isVisible() ){
int cx;
cx = array[i].getX();
int x = cx + array[i].getWidth();
if (x > maxX) maxX = x;
int cy;
cy = array[i].getY();
int y = cy + array[i].getHeight();
if (y > maxY) maxY = y;
}
}
return new Dimension(maxX, maxY);
}
}
关键是preferredSizeOfAllFramesQ)ҎQ子H口Ud旉成JDesktop的刷斎ͼ它调用preferredSizeOfAllFramesQ)Ҏ重新计算最佳JDesktop的大,q过revalidate()Ҏ来通知它的上层容器即JScrollPaneQJScrollPane会根据JDesktop的大来调整自nViewport的大,当Viewport的大超出可视范_JScrollPane出现滚动条?
在你的程序中Q只要用q个新的JDesktopc,可以在MDIH口中实现滚动条?/p>