有没有办法调整JCombobox的下拉窗口大小?
让我说我有:
comArmor.setBounds(81, 102, 194, 26);
但是当用户选择该框并弹出下拉列表时,我希望下拉窗口能够展开,以便完整显示一长行文本(比如x的大小为300) )。
这可能吗?
答案 0 :(得分:2)
即使组合框尺寸较小,弹出菜单大小足以显示项目的小黑客
来源:http://www.jroller.com/santhosh/entry/make_jcombobox_popup_wide_enough
import java.awt.Dimension;
import java.util.Vector;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
public class ComboBoxFullMenu<E> extends JComboBox<E> {
public ComboBoxFullMenu(E[] items) {
super(items);
addActionListener(this);
}
public ComboBoxFullMenu(Vector<E> items) {
super(items);
addActionListener(this);
}
public ComboBoxFullMenu(ComboBoxModel<E> aModel) {
super(aModel);
addActionListener(this);
}
/**
* Small hack to get pop up menu size bigger enough to show items even though
* the combo box size could be smaller
* */
private boolean layingOut = false;
@Override
public void doLayout(){
try{
layingOut = true;
super.doLayout();
}finally{
layingOut = false;
}
}
@Override
public Dimension getSize(){
Dimension dim = super.getSize();
if ( !layingOut ) {
dim.width = Math.max(dim.width, getPreferredSize().width);
}
return dim;
}
}
答案 1 :(得分:0)
不确定是否已有内置功能,但您可以始终拥有一个ActionListener
来监听选择更改,然后以编程方式将JComboBox
的宽度设置为所选的长度内容(getSelectedItem()
)何时发生变化。
box.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
String item = comboBox.getSelectedItem().toString();
comboBox.setBounds(81, 102, item.length * CONSTANT, 26);
}
});
对我来说这似乎有些笨拙,你可能不得不玩弄这个想法让它发挥作用。
我希望这可以帮到你!
<强>更新强>
JComboBox似乎有一个setPrototypeDisplayValue(Object)
方法,用于根据参数的长度计算组件的首选宽度。
设置用于计算UI部分显示大小的原型显示值。
我可能会考虑改用它。