I have a JComboBox
with 2 columns inside. I am getting the data from a database in an ArrayList
. And with loop in the JComboBox
:
for(int x = 0; x < result.size(); x++)
combo.addItem(new String[]{
(String) result.get(x),""+(String) result2.get(x)});
This is my Custom Renderer:
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;
}
}
runable code:
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;
}
}
Everything is working well until I set the JComboBox
editable. It displays:
[Ljava.lang.String;@c7dc2d".
I want to display only 1 value of the 2 columns. Does anyone know how I can do this?