JComboBox显示多行文本

时间:2017-04-07 06:56:39

标签: java swing jcombobox

我目前正在编写一个小工具,用于将sql查询发送到数据库并收到相应的数据。

现在我的问题: 我想允许用户输入新的搜索查询或从“最新”列表中选择,其中保存最后几个查询。 为此,我计划使用一个可编辑的JComboBox,但是我在框中自己拼写了多行文本。

我想这样做的原因是因为sql查询可能会变得很长,因为我想让框可编辑,同时保持框架清洁。

我已经找到了在下拉菜单中显示多行的方法,但没有任何内容可用于包装盒本身。

提前感谢您,如果我忽视了一些简单的事情,请原谅我;)

问候 宙斯

1 个答案:

答案 0 :(得分:3)

ComboBoxEditor提供扩展编辑功能,这允许您定义用作组合框编辑器的实际组件

根据您的要求,您将需要(至少)JTextArea,以提供(可选)自动换行和多行

粗略而准备好的例子可能看起来像这样......

public class TextAreaComboBoxEditor implements ComboBoxEditor {

    private JTextArea ta = new JTextArea(4, 20);
    private JScrollPane sp = new JScrollPane(ta);

    public TextAreaComboBoxEditor() {
        ta.setWrapStyleWord(true);
        ta.setLineWrap(true);
    }

    @Override
    public Component getEditorComponent() {
        return sp;
    }

    @Override
    public void setItem(Object anObject) {
        if (anObject instanceof String) {
            ta.setText((String) anObject);
        } else {
            ta.setText(null);
        }
    }

    @Override
    public Object getItem() {
        return ta.getText();
    }

    @Override
    public void selectAll() {
        ta.selectAll();
    }

    @Override
    public void addActionListener(ActionListener l) {
    }

    @Override
    public void removeActionListener(ActionListener l) {
    }

}

这并不支持ActionListener,因为JTextArea使用 Enter 键是出于自己的目的。如果您愿意,可以使用key bindings API添加可以触发Action的{​​{1}},为此,您需要提供ActionListener或其他管理它们的方法,以便你可以回电话

相关问题