java - 如何防止JComboBox下拉列表超出垂直屏幕尺寸

标签 java swing jcombobox

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

我在 Windows 7 上使用 Java 6u25。

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

这是一个用于说明的屏幕截图(感谢 @trashgod 的 SSCCE)。该截图是在 XP 上的虚拟机中拍摄的。

enter image description here

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

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

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

有什么想法可以解决这个问题吗?

令我困惑的是,我没有找到任何与该问题相关的内容。我认为我要么在这里遗漏了一些明显的东西,要么我在搜索中使用了错误的关键字。如果是后两者中的任何一个,我很抱歉,请给我一个提示。

谢谢。

最佳答案

I find this description hard to believe. Can you back it up with an SSCCE?

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

Mac OS X: [Aqua Look and Feel for Mac OS X - com.apple.laf.AquaLookAndFeel]
Ubuntu:   [The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]
Windows:  [The Java(tm) Look and Feel - 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();
            }
        });
    }
}

关于java - 如何防止JComboBox下拉列表超出垂直屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8270256/

相关文章:

java - ACTION_MOVE 未报告正确的 Y 值

java - 获取 jcombobox 选中的项目

java - 如何使用 JComboBox 制作日历?

Java JComboBox 不显示

java - 将 JComboBox 放入 JTable 并从列表中获取元素而不是编辑单元格

java - Spring 3.1 实现中的 @Cacheable 与 JSF 不兼容?

java - 并发访问 : volatility and synchronization

java - 如何将对象设置在画面中央?

java - 在 swing 应用程序中显示网页

java - 基于 if/else 语句和 Action 监听器在 Java 中绘制形状