Java 如何在JTable中呈现JTable?

Java 如何在JTable中呈现JTable?,java,swing,user-interface,jtable,nested,Java,Swing,User Interface,Jtable,Nested,我正在尝试将一个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.AbstractTab

我正在尝试将一个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;
    }
}

不要将子表添加到滚动窗格中。相反,尝试将表格添加到带有BorderLayout的JPanel的中心位置,然后将表格标题添加到NORTH位置

这样做的主要原因是滚动窗格将不是交互式的,并且可能会隐藏数据

已更新

我在打电话,所以很难读懂密码:p


在主表模型中,需要重写getColumnClass方法,并确保为所需列重新调整Person.class(为其他列重新调整正确的类类型)

我将尝试滚动窗格,但是w.r.t.没有返回这个-我假设最好只实例化一次渲染器的主要组件。编辑:在没有滚动窗格的情况下,我仍然会收到一个字符串值-我将上传一个屏幕截图。如果对象寿命短,最好减少数量,但是,在每次交互中创建JTable是正确的,但这些都是次要的,因为滚动窗格没有阻止JTable显示。