2012-09-25 53 views
2

JComboBox有任何限制吗? Iam试图填充JComboBox(),并非所有的值都被填充。JComboBox是否有任何容量限制

JComboBox combo = new JComboBox(); 
String[] lines = edit.getText().split("\n"); 

for(String line : lines){ 
    String subLine = line.substring(0, 15); 
    combo.addItem(subLine); 
} 
+1

请发布[SSCCE](http://www.sscce.org)来说明您的问题。 –

+1

由于实际限制通常比实施限制更具限制性,请说明您的实际建设性要求。 – trashgod

+0

@trashgod感谢您的回复。行可以是最大5000-10000,从所有这些行的前15个字符应显示在JComboBox – FirmView

回答

2

与项目的数量没有问题,但START_UP是非常懒惰

import java.awt.*; 
import java.util.Vector; 
import javax.swing.*; 
import javax.swing.UIManager; 
import javax.swing.plaf.ColorUIResource; 
import javax.swing.plaf.metal.MetalComboBoxButton; 

public class MyComboBox { 

    private Vector<String> listSomeString = new Vector<String>(); 
    private JComboBox someComboBox = new JComboBox(listSomeString); 
    private JComboBox editableComboBox = new JComboBox(listSomeString); 
    private JComboBox non_EditableComboBox = new JComboBox(listSomeString); 
    private JFrame frame; 

    public MyComboBox() { 
     for (int i = 0; i < 100000; i++) { 
      listSomeString.add("-"); 
      listSomeString.add("Snowboarding"); 
      listSomeString.add("Rowing"); 
      listSomeString.add("Knitting"); 
      listSomeString.add("Speed reading"); 
     } 
// 
     someComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
     someComboBox.setFont(new Font("Serif", Font.BOLD, 16)); 
     someComboBox.setEditable(true); 
     someComboBox.getEditor().getEditorComponent().setBackground(Color.YELLOW); 
     ((JTextField) someComboBox.getEditor().getEditorComponent()).setBackground(Color.YELLOW); 
// 
     editableComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
     editableComboBox.setFont(new Font("Serif", Font.BOLD, 16)); 
     editableComboBox.setEditable(true); 
     JTextField text = ((JTextField) editableComboBox.getEditor().getEditorComponent()); 
     text.setBackground(Color.YELLOW); 
     JComboBox coloredArrowsCombo = editableComboBox; 
     Component[] comp = coloredArrowsCombo.getComponents(); 
     for (int i = 0; i < comp.length; i++) {// hack valid only for Metal L&F 
      if (comp[i] instanceof MetalComboBoxButton) { 
       MetalComboBoxButton coloredArrowsButton = (MetalComboBoxButton) comp[i]; 
       coloredArrowsButton.setBackground(null); 
       break; 
      } 
     } 
// 
     non_EditableComboBox.setPrototypeDisplayValue("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
     non_EditableComboBox.setFont(new Font("Serif", Font.BOLD, 16)); 
// 
     frame = new JFrame(); 
     frame.setLayout(new GridLayout(0, 1, 10, 10)); 
     frame.add(someComboBox); 
     frame.add(editableComboBox); 
     frame.add(non_EditableComboBox); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocation(100, 100); 
     frame.pack(); 
     frame.setVisible(true); 

     System.out.println(listSomeString.size()); 
     System.out.println(someComboBox.getItemCount()); 
     System.out.println(editableComboBox.getItemCount()); 
     System.out.println(non_EditableComboBox.getItemCount()); 
    } 

    public static void main(String[] args) { 
     UIManager.put("ComboBox.background", new ColorUIResource(Color.yellow)); 
     UIManager.put("JTextField.background", new ColorUIResource(Color.yellow)); 
     UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.magenta)); 
     UIManager.put("ComboBox.selectionForeground", new ColorUIResource(Color.blue)); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       MyComboBox aCTF = new MyComboBox(); 
      } 
     }); 
    } 
} 

输出可以

run: 
500000 
500000 
500000 
500000 
BUILD SUCCESSFUL (total time: 4 seconds) 
+0

的建议,用于flyweight渲染! – trashgod

+0

+1感谢代码 – FirmView

+1

@FirmView,您可以使用[自动完成](http://stackoverflow.com/questions/7255636/is-it-possible-to-have-an-autocomplete-using-jtextfield-and -a-jlist/7255918#7255918),注意也许有一个重要的问题,一个问题,---> JComboBox是基于过早的数组,并且不起作用,如果有重复项目,删除重复项目或创建自己的模型,不是在API中实现的标准模型 – mKorbel

2

如果问题空间适合,也可以考虑两个(或更多)组合层以最小化滚动,如图所示here

+0

+1谢谢,是的,我会尝试。 – FirmView

相关问题