|
语句:
1. JScrollPane pnl = new JScrollPane(someComponent);
2. pnl.setPreferredSize(someSize);
语句1定义了一个滚动窗格,并将someComponent放入其中;
语句2设置了这个滚动窗格的首选大小。
语句2的作用是显然的,因为pnl肯定还会被放入其它容器中,
此时很有可能需要根据容器所占区域的大小来设置pnl的首选大小。
问题是:什么时候需要使用下面的语句呢?
someComponent..setPreferredSize(someSize);
首先要注意的是:
通常情况下不要对someComponent进行任何的首选大小设置,
因为someComponent的大小可以任由其内部的布局管理器进行管理(如果有的话),
也可以任由someComponent自身内容的大小而随意伸缩。
如果someComponent所需的空间大小超过pnl所能提应的最大值,则pnl可以自动创建滚动条。
在多数情况下,这正是我们所需要的:交由pnl自动管理。
如果我执意要设置someComponent的首选大小,那又会怎么样呢?
非常不幸,此时你只好自己管理someComponent所需空间大小了,
因为一旦设置someComponent的首选大小,pnl将会尊重你的选择,
这样,someComponent的大小就限制在你所设置的这个值上了,无法再进行自动扩张。
这样,也就失去了使用滚动窗格pnl管理someComponent大小的意义。
下面是一个失败的例子:
JList list = new JList();
list.setPreferredSize(new Dimension(50,200));
list.setLayoutOrientation(JList.VERTICAL_WRAP);
DefaultListModel model = new DefaultListModel();
list.setModel(model);
for(int i=0; i<100; i++) {
model.addElement(i);
}
JScrollPane pnl = new JScrollPane(list);
......
本来希望list能自动滚动,但根据上面的分析可以知道:它是不听使唤的。
只有一种情况下是有必要设置someComponent的首选大小:
someComponent的大小是固定的,但界面上有可能放不下整个someComponent,
所以不得已才将它加到一个JScrollPane当中。 |
|