java - 更改组合框起点

标签 java swing combobox orientation jpopupmenu

我有一个放在 20x20 字段中的组合框,因此仅显示按钮。

当用户单击该按钮时,它会下拉一个 150 宽的弹出菜单(使用 Mark McLaren 的 WiderDropDownCombo 解决方案)。

但是,该按钮位于面板的最右侧,其中包含其他 2 个字段(均为 JTextField)。当我打开下拉菜单时,它默认从左上角开始,超出该区域的范围。我需要更改它,以便组合框出现在所有字段下方。

我尝试过弄乱 CellRenderers 和方向,但它似乎不起作用。有人知道解决方案吗?!

我创建该字段的部分的代码如下:

    HistoryProcessor processor = new HistoryProcessor(field.getName().toLowerCase());
    amount = new JTextField( amountString );
    currency = new JTextField( currencyString );
    amount.setMinimumSize( new Dimension(94, 20) );
    amount.setPreferredSize( amount.getMinimumSize() );
    amount.setMaximumSize( amount.getMinimumSize() );
    currency.setMinimumSize( new Dimension(30, 20) );
    currency.setPreferredSize( currency.getMinimumSize() );
    currency.setMaximumSize( currency.getMinimumSize() );
    popupButton = processor.populateHistoryBox();
    popupButton.setWide(true);
    popupButton.applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
    popupButton.setMinimumSize(new Dimension(20, 20));
    popupButton.setPreferredSize(popupButton.getMinimumSize());
    popupButton.setMaximumSize(popupButton.getMinimumSize());
    panel.add(amount, BorderLayout.WEST);
    panel.add(currency, BorderLayout.CENTER);
    panel.add(popupButton, BorderLayout.EAST);
    popupButton.addPopupMenuListener(new MoneyHistoryListener(this));

其中 amount 是第一个字段,currency 是第二个字段,popupButton 是组合框。它由 HistoryProcessor 自动填充。 这是我的问题的图片:/image/X3ZLk.jpg

enter image description here

提前致谢!

最佳答案

我会简单地创建您自己的按钮。这样您就可以自己控制弹出窗口的位置(和大小)

看看Make JPopupMenu Display with a Certain Bottom Left Coordinate有关如何控制 JPopupMenu

位置的示例

您将需要构建自己的 JList 并在选择更改时处理隐藏弹出窗口的问题,但将其完全放入单个组件中并没有太多工作

已更新

您可能还想查看Prevent Popup Menu Dismissal

关于java - 更改组合框起点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808001/

相关文章:

java - EJB 不能注入(inject)其他 EJB

java - 为什么一个 Swing 击键有效,而另一个击键无效?

javascript - .attr() 不适用于选择框

c# - 如何将带有转换器的组合框绑定(bind)到 WPF 中的列表

C# 在清除/设置为 null 后重新填充字典

java - 如何防止 javac 输出中出现短文件名(8.3 格式)?

Java 8 : How to write lambda stream to work with JsonArray?

java - 在 Kotlin 中调用 Java 静态方法的可能性

java - JXTable 排序不正确

java - 系统外观和感觉是否会改变元素大小?