How do I use jlists in JTable cells?
I want a simple way to put JList in the JTable column I already have jlists and tables, but when I put them into the table, jlists displays as strings, which is normal because I use defaulttablemodel I have rewritten getcolumnclass () to:
public Class<? extends Object> getColumnClass(int c) { return getValueAt(0,c).getClass(); }
But this is just formatting integer and floating point values
I think setvalueat () and getvalueat () should also be overridden in order to call JList Getselectedvalues() returns an array of strings, but I can't figure out how I also want cells to be editable, so users can choose one or more options from JList After editing a row, I use the Save button to save the changes in the database, so I don't think I need listselectionlistener, JList Getselectedvalues () works properly
I know this is a common question, but I can't find the answer here If this is a duplicate, please let me know and I will delete it
Solution
I did it. For everyone who needs the same thing, that's what I did:
1) I created a jscrolltablerenderer and set the columns I need to display JList to use this renderer
table.getColumnModel().getColumn(5).setCellRenderer(new JScrollTableRenderer());
Jscrolltablerenderer class content:
public class JScrollTableRenderer extends DefaultTableCellRenderer { JScrollPane pane = new JScrollPane(); public JScrollTableRenderer() { super(); } public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) { pane = (JScrollPane) value; return pane; } }
2) I created a jscrolltable editor and set the columns I need to display JList to use the editor
table.getColumnModel().getColumn(5).setCellEditor(new JScrollTableEditor());
Jscrolltableeditor class content:
public class JScrollTableEditor extends AbstractCellEditor implements TableCellEditor { JScrollPane component = new JScrollPane(); public Component getTableCellEditorComponent(JTable table,int rowIndex,int vColIndex) { component = ((JScrollPane) value); return ((JScrollPane) value); } public Object getCellEditorValue() { return component; } }
3) I added this method to the JTable model:
public Class<? extends Object> getColumnClass(int c) { if(c == 5) return JScrollPane.class; else return getValueAt(0,c).getClass(); }