获取 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() );
}
我想获取 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() );
}