Я пытаюсь поместить JTable внутрь в JTable .Все работает нормально, я могу получить всю дорожку информацию, а также успешно поместить ее в модель и insideTable , единственная проблема - я не могу заставить ее отрендерить.
Даже пытался установить insideTable цвет переднего плана на красный, но все равно не видел никаких изменений
table.setDefaultRenderer(List.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String[] columns = {"Name","Duration","Location"};
List<Track> tracks = (ArrayList<Track>) value;
DefaultTableModel model = new DefaultTableModel(columns,0);
JTable insideTable = new JTable(model);
for(Track t: tracks){
String[] r = {t.getName(),t.getDuration(),t.getLocation()};
model.addRow(r);
}
model.fireTableDataChanged();
insideTable.setVisible(true);
return insideTable;
}
});
Вот как это выглядит.
![Using custom render](https://i.stack.imgur.com/Zn6Lg.png)
Этот использует рендеринг по умолчанию.
![Using default render](https://i.stack.imgur.com/caaX1.png)
РЕДАКТИРОВАТЬ: Решено
table.setDefaultRenderer(List.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String[] columns = {"Name","Duration","Location"};
List<Track> tracks = (ArrayList<Track>) value;
DefaultTableModel model = new DefaultTableModel(columns,0);
JTable insideTable = new JTable(model);
for(Track t: tracks){
String[] r = {t.getName(),t.getDuration(),t.getLocation()};
model.addRow(r);
}
table.setRowHeight(row, 20 + (15 * insideTable.getRowCount()));
JScrollPane columnFix = new JScrollPane(insideTable);
columnFix.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
return columnFix;
}
});
![Fixed](https://i.stack.imgur.com/HM8Ta.png)