如何防止JComboBox下拉列表超出垂直屏幕大小

我使用带有许多条目的JComboBox(数百个)。 我想将其下拉列表的大小限制为屏幕的垂直大小。 对于不同的外观和屏幕分辨率,使用固定大小无法正常工作。

我在Windows 7上使用Java 6u25。

如果我将最大行数设置为超过适合屏幕(75)的列表项(=行)数的值(例如100),则下拉列表似乎以完整大小绘制但是最低条目永远不可见。

这是插图的截图(感谢@trashgod的SSCCE)。 在XP上的虚拟机中拍摄了sceenshot。

在此处输入图像描述

我还在另一台PC上测试了代码,所以我想我可以排除一些驱动程序问题。

我喜欢的是一个适合屏幕的下拉列表,我可以完全向下滚动到最后一个值(并查看该值)。 反过来说,我想看滚动条的向下滚动按钮。

是唯一可能渲染列表的单元格并在我的计算中使用它吗? 操纵combobox的高度参数不起作用。

任何想法如何解决这个问题?

让我感到困惑的是,我没有找到任何关于这个问题的参考。 我假设我要么缺少明显的东西,要么我在搜索时使用了错误的关键字。 如果后两者中的任何一个,我道歉请给我一个提示。

谢谢。

我发现这种描述很难相信。 你能用SSCCE备份它吗?

你的怀疑是有根据的; 我的描述是基于远程实现的远程记忆。 使用下面的sscce ,我看到一个滚动条和@uhm报告的截断; 我只能使用键盘从最后的六个隐藏条目中进行选择。 我在这些平台上得到了类似的结果:

 Mac OS X:[适用于Mac OS X的Aqua外观和感觉 -  com.apple.laf.AquaLookAndFeel]
 Ubuntu:[Java(tm)外观 -  javax.swing.plaf.metal.MetalLookAndFeel]
 Windows:[Java(tm)外观 -  javax.swing.plaf.metal.MetalLookAndFeel]
 import java.awt.EventQueue; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; /** @see http://stackoverflow.com/questions/8270256 */ public class TallCombo extends JPanel { private static final int N = 128; public TallCombo() { final JComboBox combo = new JComboBox(); for (int i = 0; i < N; i++) { combo.addItem("Item " + Integer.valueOf(i)); } combo.setMaximumRowCount(N / 2); this.add(combo); } private void display() { JFrame f = new JFrame("TallCombo"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); System.out.println(UIManager.getLookAndFeel()); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new TallCombo().display(); } }); } } 

我找到了这个例子: http : //www.javaprogrammingforums.com/awt-java-swing/11457-jcombobox-scroll-bars.html (在底部)