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
来触发 ActionListener
s,为此,你需要提供 List
或管理它们的其他方法,以便您可以给它们回电
我目前正在编写一个小工具,用于向数据库发送 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
来触发 ActionListener
s,为此,你需要提供 List
或管理它们的其他方法,以便您可以给它们回电