2012-04-22 5 views
3

私はコンボボックスを作ったが、要素のいくつかは私のボックスの幅よりも広い。そこで私は水平スクロールペインを追加しようとしましたが、コンボボックスを内蔵したスクロールパネルしか見ることができませんでした。 Certanly私は間違っています。では、jscrolpaneのないコードを紹介します。JComboBoxのJScrollPane

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

どのようにしてコンボボックスに水平スクロールペインを追加できますか? ありがとうございました!

+0

あなたのコードでは、スクロールペインの言及はありません。何を正確に試しましたか? –

+0

作業していないので、コードから削除しました!スクロールペインを作ってコンボボックスを追加しましたが、コンボボックスが入ったスクロールペインが表示されます。 – Vagelism

+0

スクロールペインにコンボを追加すると、それはまさにあなたが得ようとしているものです。しかし、私が正しく理解している場合、コンボボックスのリストコンポーネントにスクロールペインを追加したいとします。それがまったく実行可能であれば、おそらくいくつかのハッキングを伴います。 –

答えて

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())を呼び出すと、これらの2つの無効な関数が内部的に呼び出されるため、使用されていないと心配する必要はありません。

ここでコンボボックスより広い要素を示すプログラムのスクリーンショットです: screenshot

グッドラックは! :-)

+0

ありがとうございます。私が探していたものですか? – Vagelism