我正在尝试将JTable嵌套在另一个JTable的列中(使用CellRenderer)。
示例(错误)输出:
为什么以下示例不在表中输出表?
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;
}
}
答案 0 :(得分:4)
不要将子表添加到滚动窗格。相反,尝试将表格添加到带有BorderLayout的JPanel的中心位置,然后将表格标题添加到NORTH位置
主要原因是滚动窗格不是交互式的,可能会隐藏数据
<强>更新强>
我正在打电话,因此很难阅读代码:P
在主表模型中,您需要覆盖getColumnClass方法,并确保为所需列重新调整Person.class(以及其他列的正确类类型)