Java - JScrollPane 与 JTable 未显示

标签 java swing jtable jscrollpane

我有一个 JPanel,我在其中添加了一个 JScrollPane(请参见下面的类)。我添加了一个 JTextField 来验证一切是否正常(而不是 JScrollPane),并且文本字段已添加到面板中。当我尝试添加 JScrollPane 时,没有显示任何内容(白色背景)。我该如何解决这个问题?

protected JPanel createContentPanel() {
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());

    final String[] columnNames = { "Test1", "Test2", "Test3" };
    final String[][] data = {
            { "foo1", "foo2", "foo3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" },
            { "bar1", "bar2", "bar3" }
    };

    ScrollableTable scrollableTablePane = new ScrollableTable(data, columnNames);
    panel.add(scrollableTablePane, BorderLayout.CENTER);
    return panel;
}


public class ScrollableTable extends JScrollPane {

    public ScrollableTable(String[][] aData, String[] aColumnNames) {
        super();

        TableModel model = getTableModel(aData, aColumnNames);
        JTable overviewTable = new JTable(model);
        overviewTable.setGridColor(new Color(240, 240, 240));
        TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
        overviewTable.setRowSorter(sorter);

        this.add(overviewTable);
    }

    private TableModel getTableModel(String[][] aData, String[] aColumnNames) {
        TableModel model = new DefaultTableModel(aData, aColumnNames) {
            public Class<?> getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        return model;
    }
}

最佳答案

要设置 JScrollPane 的显示组件,请使用 JScrollPane#setViewportView(Component)而不是添加(组件)。

public ScrollableTable(String[][] aData, String[] aColumnNames) {
    super();

    TableModel model = getTableModel(aData, aColumnNames);
    JTable overviewTable = new JTable(model);
    overviewTable.setGridColor(new Color(240, 240, 240));
    TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    overviewTable.setRowSorter(sorter);

    this.setViewportView(overviewTable);
}

关于Java - JScrollPane 与 JTable 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972228/

相关文章:

java - 如何根据条件从数组中获取对象?

java - 如何使用z轴?

java - 将加载圆添加到 JTable

java - 验证jtable是否为空?

java - 如何防止我的网络应用程序在 Java 中受到 CSRF(跨站点请求伪造)

java - 将 JTabbedPane 居中,但不将实际选项卡居中

java - 在面向对象编程中创建 Action

java - 需要在 chrome 浏览器上阻止 "This page has insecure content"消息?

java - 保存数据并创建一个不包含该数据的新面板

java - 更改 JTable 单元格颜色