JComboBox,我往里面放入值,下拉框选项的值有几十个才显示滚动条。我用setMaximumRowCount(10)这个方法设置长度都没用。用到了mac风格的jar。再xp下面不会出现这样的情况,请问有没有什么解决方式解决这个问题?
望大虾们指点一下,没有多少积分,下次有积分的时候给补上哈。。。。
[b]问题补充:[/b]
它getMaximumRowCount(); 打印出来的是只有8,但是下来选项确还是那么长,而且setMaximumRowCount(); 但是不起反映,调用他都完全起不了作用,什么也没改变。
[b]问题补充:[/b]
类似jake0719的方法 是什么方法呢?能否详细介绍一下哦~
[b]问题补充:[/b]
jake0719 非常谢谢你的帮忙,但是还是没有怎么明白你说的。我用mac风格的一个quaqua.jar。程式就显示出来mac的风格,是在xp的环境下面。你说的那个popou,CreatPopupMenu没怎么明白哦,它是针对JComboBox的吗?还是怎么的?
“接设置popup出来的pane的大小了. ”是指。。。?
[b]问题补充:[/b]
不能,也没有。。。
本来用setMaximumRowCount在windowNT下就可以解决你的问题.但是由于你在mac机上不行,估计是jdk在不同平台上的表现不一致的问题, 也就是mac-jdk的问题,所以怎么setMaximumRowCount都没用, 那就干脆直接设置popup出来的pane的大小了.
也许你会问为什么不createPopupMenu的时候设置好大小就ok了,何必每次popup的时候设置这么麻烦呢? 因为我在xp下试过了这样做不行. 呵呵, 具体原因没时间深究下去了.所以你先这么试试看, ok的话就这样用着好了.
这个源码我也没有看过,不过我想肯定是可以做到的,我也做到类型的工作.我是修改了源码,先要看一下那个下拉是一个什么标签组成的,这后就可以根据标签的属性来修改
试试这样(虽然不怎么艺术):
JComboBox box = new JComboBox(model);
final Dimension ds = new Dimension(100, 400);
box.addPopupMenuListener(new PopupMenuListener() {
public void popupMenuCanceled(PopupMenuEvent noop) { }
public void popupMenuWillBecomeInvisible(PopupMenuEvent noop) { }
public void popupMenuWillBecomeVisible(PopupMenuEvent pme) {
JComboBox cb = (JComboBox)pme.getSource();
Object popup = cb.getUI().getAccessibleChild(cb, 0);
if (popup instanceof Container) {
Component scrollPane = ((Container)popup).getComponent(0);
if (scrollPane instanceof JScrollPane) {
((JComponent)scrollPane).setPreferredSize(ds);
((JComponent)scrollPane).setMaximumSize(ds);
}
}
}
});
JComboBox cb = new JComboBox(model);
cb.getMaximumRowCount();
先看看现在的max row是多少,
再setMaximumRowCount(10);
看看值有没有改变。
8是默认行数,setMaximumRowCount()压根没起作用,试试类似jake0719的方法吧。
下拉框其实就是一个popup出来的Jscrollpane(其实就是visible和invisible之间的转换), 给jcombobox加了一个PopupMenuListener, 每次visible的时候设置下jscrollpane的size. 所以我说不怎么艺术. 这个size由
final Dimension ds = new Dimension(100, 400); 决定.你可以自己修改这个大小.
不能用子下拉列表吗?
朋友,问题要自动关闭啦,结分哦