gpt4 book ai didi

java - 如何在 JTable 中呈现 JTable?

转载 作者:搜寻专家 更新时间:2023-11-01 02:49:10 26 4
gpt4 key购买 nike

我正在尝试将一个 JTable 嵌套在另一个 JTable 的列中(使用 CellRenderer)。

示例(错误)输出:

enter image description here

为什么下面的例子没有输出表中表?

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;
}
}

最佳答案

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

这样做的主要原因是滚动 Pane 不会交互并且可能隐藏数据

已更新

我在打电话,所以很难阅读代码:P

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

关于java - 如何在 JTable 中呈现 JTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com