JComboBox 显示多行文本

JComboBox to display multiple lines of text

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

现在解决我的问题: 我想允许用户输入新的搜索查询或 select 来自 "latest" 列表,其中保存了最后几个查询。 为此,我计划使用可编辑的 JComboBox,但我无法在框中显示多行文本。

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

我找到了在下拉菜单中显示多行的方法,但框本身没有。

在此先感谢您,如果我忽略了一些简单的事情,请原谅我;)

您好 宙斯

扩展编辑功能由 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 来触发 ActionListeners,为此,你需要提供 List 或管理它们的其他方法,以便您可以给它们回电