2012-04-22 43 views
3

我由組合框,但一些元件的比我的盒子的寬度寬。所以我試着添加一個水平滾動條,而我唯一能看到的就是一個帶有組合框的滾動條! Certanly我做錯了。所以這裏是我沒有jscrolpane的代碼。JScrollPane的上的JComboBox

issuerdocumentJComboBox=new JComboBox<>(issuermodel);//the compo box 
    issuerdocumentJComboBox.setBounds(430, 120, 100, 30); 
    searchDocumentesJPanel.add(issuerdocumentJComboBox); 

如何添加到組合框的水平滾動窗格? 謝謝!

+0

在你的代碼沒有ScrollPane的提及。你究竟嘗試了什麼? – 2012-04-22 11:10:51

+0

我從我的代碼中刪除它,因爲不工作!我製作了一個scrollpane並添加了組合框,但隨後出現了一個帶有組合框的滾動窗格。 – Vagelism 2012-04-22 11:50:00

+0

好吧,如果你添加一個組合到一個滾動窗格,那正是你應該得到的。但是如果我理解正確,你想要將一個滾動窗格添加到組合框的列表組件。如果它完全可行,它可能會涉及一些黑客行爲。 – 2012-04-22 11:54:03

回答

4

有可能!這裏有一個小程序,我寫來顯示我的解決方案:

import java.awt.Component; 
import java.awt.Dimension; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 
import javax.swing.ScrollPaneConstants; 
import javax.swing.plaf.basic.BasicComboBoxEditor; 

public class TestComboScroll { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Scroll inside Combo"); 
     JComboBox combobox = new JComboBox(); 

     combobox.addItem(""); 
     combobox.addItem("Item1"); 
     combobox.addItem("Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2 Item2"); 
     combobox.addItem("Item3"); 

     combobox.setEditor(new MyEditor()); 
     combobox.setEditable(true); 

     combobox.setPreferredSize(new Dimension(200, 50)); 
     frame.add(combobox); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    static class MyEditor extends BasicComboBoxEditor{ 
     JScrollPane scroller = new JScrollPane(); 
     //NOTE: editor is a JTextField defined in BasicComboBoxEditor 

     public MyEditor(){ 
      super(); 
      scroller.setViewportView(editor); 
      scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     } 

     /** Return a JScrollPane containing the JTextField instead of the JTextField **/ 
     @Override 
     public Component getEditorComponent() { 
      return scroller; 
     } 

     /** Override to create your own JTextField. **/ 
     @Override 
     protected JTextField createEditorComponent() { 
      JTextField editor = new JTextField(); 
      editor.setBorder(null); 
      /*editor.setEditable(false); //If you want it not to be editable */ 
      return editor; 
     } 
    } 
} 

的方法是創建一個顯示在滾動窗格(容易只是延長BasicComboBoxEditor)JTextField的編輯器自定義ComboBoxEditor。 然後重寫getEditorComponent()函數以返回滾動窗格而不是文本字段。

,當你調用combobox.setEditor(new MyEditor()),如果你不能看到它被使用,所以不要擔心這兩個overidden函數內部調用。

這裏的一個截圖程序的顯示出比組合框寬的元件: screenshot

古德納克!! :-)

+0

謝謝你,我正在看什麼! – Vagelism 2012-09-26 13:10:20