3

コンボボックスを作成しましたが、一部の要素がボックスの幅よりも広くなっています。そこで、水平のスクロールペインを追加しようとしましたが、コンボボックスが内部にあるスクロールペインしか見えませんでした! 確かに私は何か間違っています。だからここにjscrolpaneのない私のコードがあります。

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

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

4

1 に答える 1

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;
        }
    }
}

アプローチは、JTextField エディタをスクロール ペインに表示するカスタム ComboBoxEditorを作成することです (BasicComboBoxEditor を拡張するだけで簡単です)。このgetEditorComponent()関数は、テキスト フィールドではなくスクロール ペインを返すようにオーバーライドされます。

これら 2 つのオーバーライドされた関数は、呼び出し時に内部的に呼び出されるcombobox.setEditor(new MyEditor())ため、使用されていることがわからなくても心配する必要はありません。

以下は、コンボボックスより幅の広い要素を表示するプログラム のスクリーンショットです。スクリーンショット

幸運を!!:-)

于 2012-09-25T04:48:34.920 に答える