rad*_*nys 3 java swing jtable jlist
我想要一个简单的方法将JList放在JTable的列中.我已经有了JLists和表,但是当放入表中时,Jlists显示为Strings,这是正常的,因为我使用DefaultTableModel.我已经将getColumnClass()重写为:
public Class<? extends Object> getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
Run Code Online (Sandbox Code Playgroud)
但这只是格式化整数和浮点值.
我想也应该覆盖setValueAt()和getValueAt(),以便在调用JList.getSelectedValues()时返回字符串数组,但我无法弄清楚如何.
我还希望单元格可以编辑,因此用户可以从JList中选择一个或多个选项.编辑一行后,我使用Save按钮将更改保存在数据库中,所以我认为我不需要ListSelectionListener,JList.getSelectedValues()可以正常工作.
我知道这是一个常见问题,但我在这里找不到答案.如果这是重复,请告诉我,我将删除它.
我做到了 对于每个需要同样事情的人来说,这就是我所做的:
1)我创建了一个JScrollTableRenderer,并设置了我需要显示JList以使用此渲染器的列
table.getColumnModel().getColumn(5).setCellRenderer(new JScrollTableRenderer());
Run Code Online (Sandbox Code Playgroud)
JScrollTableRenderer类内容:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
2)我创建了一个JScrollTableEditor,并设置我需要的列来显示JList以使用这个编辑器
table.getColumnModel().getColumn(5).setCellEditor(new JScrollTableEditor());
Run Code Online (Sandbox Code Playgroud)
JScrollTableEditor类内容:
public class JScrollTableEditor extends AbstractCellEditor implements TableCellEditor {
JScrollPane component = new JScrollPane();
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int rowIndex, int vColIndex)
{
component = ((JScrollPane) value);
return ((JScrollPane) value);
}
public Object getCellEditorValue()
{
return component;
}
}
Run Code Online (Sandbox Code Playgroud)
3)我在JTable模型中添加了这个方法:
public Class<? extends Object> getColumnClass(int c)
{
if(c == 5) return JScrollPane.class;
else return getValueAt(0, c).getClass();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6438 次 |
| 最近记录: |