【问题标题】:Get JComboBox items string representation获取 JComboBox 项目字符串表示
【发布时间】:2016-10-17 14:58:57
【问题描述】:

我想获取 JComboBox 模型中包含的所有项目的字符串表示,如何做到这一点?

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

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

【问题讨论】:

    标签: java swing user-interface jcombobox


    【解决方案1】:

    如果您渲染的文本与 Object 的 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() );
    }
    

    【讨论】:

    • model.getElement(i) 应该是 model.getElementAt(i) - 不能编辑你的帖子,因为 SO 说编辑必须至少 6 个字符
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多