java - 使用 JTable 作为 JScrollPane 的 columnHeader,同时保持每列的宽度

标签 java swing jtable jscrollpane jtableheader

只是寻找一个快速的答案:是否可以使用 JTable 作为 JScrollPane 的 columnHeader?

我有一个已配置的 JTable,具有不同的列宽和列标题,并计划将标题用作滚动 Pane 的 columnHeader。我怎样才能做到这一点?我用

scrollPane.setColumnHeaderView(table);

但它没有出现。

所以感谢Guillaume Polet,应该是

scrollpane.setColumnHeaderView(table.getTableHeader());

但是现在所有的列都具有相同的宽度,尽管我在我的表格中为它们设置了不同的值。如何让表格列显示不同的宽度?

最佳答案

如果我没理解错的话,您希望表格的列标题显示在视口(viewport)的列标题中,但您希望在视口(viewport) View 中显示其他内容?

然后您需要获取表格标题并将其设置为视口(viewport)的列标题。

这是一个例子:

import java.awt.BorderLayout;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestTableHeader {

    protected void initUI() {
        Vector<Vector<Object>> data = new Vector<Vector<Object>>();
        Vector<String> colNames = new Vector<String>();
        for (int i = 0; i < 5; i++) {
            colNames.add("Col-" + (i + 1));
        }

        table = new JTable(data, colNames);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        scrollpane = new JScrollPane();
        scrollpane.setColumnHeaderView(table.getTableHeader());
        scrollpane.setViewportView(new JLabel("some label in the viewport view"));
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    private JTable table;
    private JScrollPane scrollpane;

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestTableHeader().initUI();
            }
        });
    }

}

关于java - 使用 JTable 作为 JScrollPane 的 columnHeader,同时保持每列的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035102/

相关文章:

java - 使用 Retrofit 2.0 和 Spring Server 下载文件

java - Swing:使用 jeditor Pane ,在窗口中键入,导致我的显示向下移动

java - 如何操作粘贴到 JTextField 中但不输入的文本?

java - 编辑 JTable 单元格时更改其字体

java - Maven 测试不使用 Spring Boot 2.2 和 JUnit 5 运行 Cucumber 场景

java - 恢复后 libgdx 无法正确呈现字体

java - 如何为数据存储管理配置任务队列以最大限度地减少前端实例数量?

java - swingWorker 是否保证在完成时抛出状态属性更改事件?

Java:JTable自动主键更新

java - 复选框在 JTable 中不起作用/不可编辑