How to make JTable inside JTable?

I am trying to insert a JTable inside another JTable column (using CellRenderer).

Example (erroneous) output:

enter image description here

Why does the following example not display a table in a table?

import java.awt.Component; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; public class Test { public static void main(String[] args) { JTable table = new JTable(new CustomTableModel()); table.setDefaultRenderer(Person.class, new CustomRenderer()); JPanel panel = new JPanel(); panel.add(new JScrollPane(table)); JFrame frame = new JFrame(); frame.setContentPane(panel); frame.pack(); frame.setVisible(true); } } @SuppressWarnings("serial") class CustomTableModel extends AbstractTableModel { @Override public int getColumnCount() { return 2; } @Override public int getRowCount() { return 1; } @Override public Object getValueAt(int row, int col) { if (col == 0) { return new Person("Bob"); } else { return "is awesome!"; } } } @SuppressWarnings("serial") class CustomRenderer extends JPanel implements TableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { JTable t = new JTable(new CustomTableModel()); add(new JScrollPane(t)); return this; } } class Person { public String name = ""; public Person(String name) { this.name = name; } } 
+4
source share
1 answer

Do not add a helper table to the scroll bar. Instead, try adding the table to the central JPanel position using BorderLayout, and then add the table title to the NORTH position

The main reason for this is that the scrollbar will not be interactive and may hide data

Update

I am on the phone, so it is difficult to read the code: P

In your main table model, you need to override the getColumnClass method and make sure that you reconfigure Person.class for the desired column (and the correct class types for other columns)

+4
source

All Articles