获取 JComboBox 项目字符串表示

Get JComboBox items string representation

我想获取 JComboBox 模型中包含的所有项目的字符串表示形式,该怎么做?

    ListModel model = combobox.getModel();   
    for(int i = 0; i < model.getSize(); i++) 
    {
        componentTexts.add( model.getElementAt( i ).toString() );
    }

这给了我与组合框项目不同的字符串 - CellRenderer 决定每个组合框项目的标签文本?

基本上,您不能在所有情况下都这样做,因为 CellRenderer 不是 return 字符串,而是 return 它认为适合显示的任何 JComponent,例如也可以是图标、图像、色块或更复杂的东西。

不过,您可以尝试访问组合框的 CellRenderer 并向 cellRenderer 询问每个组合框项目。这将 return 你一个 JComponent。如果它是一个 JLabel(它可能经常是)​​,您可以使用 getText() 方法来提取文本。类似于:

if (component instance JLabel) {
    componentTexts.add ((JLabel) component).getText());
}

如果您渲染的文本与对象的 toString() 不同,那么您需要直接调用渲染器。

代码可能类似于:

ListCellRenderer renderer = comboBox.getRenderer();

Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();

ListModel model = combobox.getModel();   
for(int i = 0; i < model.getSize(); i++) 
{
    Object value = model.getElementAt(i);
    JLabel label = (JLabel)renderer.getListCellRendererComponent(list, value, i, false, false);
    components.add( label.getText() );
}