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



只是寻找一个快速答案:是否可以将JTable用作JSCrollpane的columnheader?

我有一个具有不同列宽度和列标题的JTable,并计划将标题用作Scrollpane的列板。我该如何实现?我用

设置了桌子
scrollPane.setColumnHeaderView(table);

但没有出现。

所以感谢Guillaume Polet,应该是

scrollpane.setColumnHeaderView(table.getTableHeader());

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

如果我正确理解您,您希望表的列标题出现在视口的列标题中,但是您想要在视口视图中其他内容?

然后,您需要抓住表标头并将其设置为视口的列标题。

这是一个示例:

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

相关内容

  • 没有找到相关文章

最新更新