改变组合框起点

时间:2013-07-23 10:47:05

标签: java swing combobox orientation jpopupmenu

我有一个放在20x20字段中的组合框,所以只显示了按钮。

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

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

我已经尝试过使用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是第一个字段,货币是第二个字段,popupButton是组合框。它由HistoryProcessor自动填充。 这是我的问题的图像:http://i.stack.imgur.com/X3ZLk.jpg

enter image description here

提前致谢!

2 个答案:

答案 0 :(得分:2)

我只想创建自己的按钮。这样你就可以自己控制弹出窗口的位置(和大小)

请查看Make JPopupMenu Display with a Certain Bottom Left Coordinate,了解如何控制JPopupMenu的位置

您需要构建自己的JList并在选择更改时处理隐藏弹出窗口,但将它完全放入单个组件中并不会有太大作用

<强>更新

您可能还想查看Prevent Popup Menu Dismissal

答案 1 :(得分:0)

查看java中的不同Layout Managers。使用多个JPanel,您可以组合不同的布局管理器以满足您的需求。我希望这会对你有所帮助。