如何防止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 (在底部)