2017-04-07 50 views
1

我目前正在編寫一個小型工具,用於將sql查詢發送到數據庫並接收相應的數據。JComboBox顯示多行文字

現在到我的問題: 我想讓用戶輸入一個新的搜索查詢或從最新的列表中選擇,最後幾個查詢被保存。 爲此,我計劃使用一個可編輯的JComboBox,但在盒子本身中出現多行文本時遇到問題。

我想這樣做的原因是因爲sql查詢可能會變得很長,因爲我想讓該框可編輯,同時保持框架清潔。

我已經找到了在下拉菜單中顯示多行的方法,但是沒有任何內容。

謝謝你提前請原諒我,如果我忽略了一些簡單;)

問候 宙斯

+1

請,發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)與您的問題 –

回答

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使用輸入它自己的目的關鍵。如果你願意,你可以使用key bindings API添加自己Action能夠觸發ActionListener S,對於這一點,你需要提供一個List或其他手段來管理他們,所以你可以叫他們回來