没有表头的JTable

27

有人能告诉我如何创建一个没有表头的表格吗?

我正在制作数独谜题,想在Java中创建一个没有表头的表格,这可行吗?


不要添加列名...使用任何其他的构造函数...或默认值?我希望你是在谈论JTable。 - RubyDubee
3
@saurabh:在这里不欢迎 3133t 语言。我修改了你的帖子,但下次请避免使用“any1”、“plz thx”和多个“??”。我能有芝士汉堡吗? - SyntaxT3rr0r
2
什么桌子?它也需要椅子吗?哈哈 - Buhake Sindi
@SyntaxT3rr0r 是个很牛逼的名字 ;) - Matthieu
6个回答

38

我认为您不希望您的数独游戏滚动,所以最简单的方法应该是不要将您的表格放入JScrollPane中,它负责显示标题:

alt text


另一种方法是调用

table.setTableHeader(null);

1
对我来说,这两种解决方案都没有对标题产生任何影响。我甚至尝试过 table.getTableHeader.setVisible(false),但是标题所在的空白灰色区域仍然存在。我知道这是一个旧帖子了,API有变化还是我漏掉了什么? - Masked Coder
1
看起来你漏掉了什么,我刚试了两种建议的方法,它们都有效。将TableHeader设置为不可见确实会留下一个灰色斑点,因为布局没有改变。如果你无法解决问题,请随时提出另一个问题,附上一个简短的示例以重现你的问题和结果的屏幕截图。 - Peter Lang

8

如果有人遇到了推荐方法无法解决的问题,请尝试以下方法:

jTable.getTableHeader().setUI(null);

这是使用Java 8进行测试的。


3

看起来,诀窍是首先使用DefaultTableModel构造函数设置标题,然后稍后调用setTableHeader(null)。

enter image description here

这是一些演示代码:

package net.raysforge.visual.demo;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableAndGBC {

    private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};
    private JTable table;
    private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},
        {"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};
    private DefaultTableModel model = new DefaultTableModel(data, columnNames);

    public JTableAndGBC() {
        JPanel panel = new JPanel(new GridBagLayout());
        table = new JTable(model);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        JScrollPane pane = new JScrollPane(table);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.setTableHeader(null);
        panel.add(pane, gbc);
        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableAndGBC();
            }
        });
    }
}

2
傻瓜式操作:像我这样做:]
jTable.setTableHeader(null);

0

jTable.getTableHeader().setUI(null)在更改外观和感觉(L&F)后将不起作用。

对我有用的方法是重置包装JTable的滚动窗格(在我的情况下分配给变量scrollPaneSummary)的列标题的可见性,如下所示:

scrollPaneSummary = new javax.swing.JScrollPane();
scrollPaneSummary.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollPaneSummary.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPaneSummary.setViewportView(  summaryJtable  );
scrollPaneSummary.setColumnHeaderView( summaryJtable.getTableHeader());

// make JTable headers invisible
scrollPaneSummary.getColumnHeader().setVisible(false);
scrollPaneSummary.revalidate();


  

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接