我目前正在编写一个小工具,用于将sql查询发送到数据库并收到相应的数据。
现在我的问题: 我想允许用户输入新的搜索查询或从“最新”列表中选择,其中保存最后几个查询。 为此,我计划使用一个可编辑的JComboBox,但是我在框中自己拼写了多行文本。
我想这样做的原因是因为sql查询可能会变得很长,因为我想让框可编辑,同时保持框架清洁。
我已经找到了在下拉菜单中显示多行的方法,但没有任何内容可用于包装盒本身。
提前感谢您,如果我忽视了一些简单的事情,请原谅我;)
问候 宙斯
答案 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
或其他管理它们的方法,以便你可以回电话