JCombobox多列可编辑

时间:2014-09-09 08:08:02

标签: java swing jcombobox multiple-columns

我有JComboBox,里面有2列。我从ArrayList的数据库中获取数据。并在JComboBox中使用循环:

for(int x = 0; x < result.size(); x++)
    combo.addItem(new String[]{
            (String) result.get(x),""+(String) result2.get(x)});

这是我的自定义渲染器:

class MyRenderer extends JPanel implements ListCellRenderer<Object> {  

    private static final long serialVersionUID = 236185631594254585L;

    JLabel[] lbl = new JLabel[2];  

    public MyRenderer () {  

        setLayout(new GridLayout(0,2));  
        for(int x = 0; x < lbl.length; x++){  
            lbl[x] = new JLabel();  
            lbl[x].setOpaque(true);  
            add(lbl[x]);  
        }  
    }  

    public Component getListCellRendererComponent (JList<?> list,Object value,  
                  int index,boolean isSelected,boolean cellHasFocus) {  

        for(int x = 0; x < lbl.length; x++)
            lbl[x].setText((String)((String[])value)[x]);  
        return this;  
    }  
}  

可运行的代码:

public class MultipleComboTest extends JFrame {

JComboBox<String[]> combo = new JComboBox<String[]>();  

ArrayList result;
ArrayList result2;

public TestingMultipleCombo(){ 

setLocation(400,300);  
setDefaultCloseOperation(EXIT_ON_CLOSE);  
combo.setRenderer(new MyRenderer());  
getContentPane().add(combo);  

 result = new ArrayList();  
 result2 = new ArrayList();

    result.add("Test1");
    result.add("Test2");
    result2.add("Value1");
    result2.add("Value2");


for(int x = 0; x < result.size();x++) combo.addItem(new String [] {(String)   result.get(x),""+(String) result2.get(x)});  
pack(); 

combo.setEditable(true);

}  
public static void main(String[] args){new TestingMultipleCombo().setVisible(true);}  
}  

class MyRenderer extends JPanel implements ListCellRenderer<Object> {  

private static final long serialVersionUID = 236185631594254585L;


JLabel[] lbl = new JLabel[2];  

  public MyRenderer(){  

    setLayout(new GridLayout(0,2));  
    for(int x = 0; x < lbl.length; x++){  
      lbl[x] = new JLabel();  
      lbl[x].setOpaque(true);  
      add(lbl[x]);  
    }  
  }  

public Component getListCellRendererComponent(JList<?> list,Object value,  
                  int index,boolean isSelected,boolean cellHasFocus){  

for(int x = 0; x < lbl.length; x++){  
  lbl[x].setText((String)((String[])value)[x]);  
}  
return this;  
}  
}  

在设置JComboBox可编辑之前,一切正常。它显示:

  

[Ljava.lang.String; @ c7dc2d”

我想只显示2列的1个值。 有谁知道我怎么能这样做?

0 个答案:

没有答案