2012-04-22 4 views
3

Я сделал combobox, но некоторые из элементов шире ширины моего ящика. Поэтому я попытался добавить горизонтальную прокрутку, и единственное, что я мог видеть, это прокрутка со списком внутри! Certanly что-то я делаю неправильно. Итак, вот мой код без jscrolpane.JScrollPane on JComboBox

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

Как добавить в поле со списком горизонтальную прокрутку? Спасибо!

+0

В вашем коде не упоминается прокрутка. Что вы пробовали? –

+0

Я удалил его из своего кода, так как не работает! Я сделал scrollpane и добавил combobox, но затем он появляется scrollpane с выпадающим списком внутри. – Vagelism

+0

Ну, если вы добавите комбо в scrollpane, это именно то, что вы должны получить. Но вы хотите добавить scrollpane в компонент списка со списком, если я правильно понимаю. Если это выполнимо вообще, это, вероятно, будет связано с некоторыми взломами. –

ответ

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

подход заключается в создании пользовательского ComboBoxEditor, который отображает редактор JTextField в панели скроллинга (проще просто расширить BasicComboBoxEditor). Функция getEditorComponent() затем переопределяется, чтобы вернуть панель прокрутки вместо текстового поля.

Эти две переопределенные функции называются внутренне, когда вы вызываете combobox.setEditor(new MyEditor()), поэтому не беспокойтесь, если вы не видите, что он используется.

Вот скриншота программы, показывающий элемент шире, чем выпадающий список: screenshot

GOODLUCK !! :-)

+0

Спасибо. Это то, о чем я смотрел! – Vagelism