【问题标题】:Spacing JTable header间距 JTable 标头
【发布时间】:2012-04-29 16:37:41
【问题描述】:

我知道间距JTable 单元格非常简单,如下所示;

int gapWidth = 10;
int gapHeight = 5;
table.setIntercellSpacing(new Dimension(gapWidth, gapHeight));

这样的间距似乎不会影响表格标题。有没有办法以相同的尺寸间隔标题?

【问题讨论】:

  • 不清楚你到底在做什么(对齐标题和实际的行单元格值看起来有点偏离 - 不仅有点,标题居中:-) - 最好展示一个 SSCCE 来证明这个问题(正如@mKorbel 已经建议的那样)
  • 我做的事情和@mKorbel 完全一样,我的代码唯一不同的是,我已经调整了我的两列。
  • 但在他的示例中,根本没有文本(这就是您所追求的?)对齐(在标题/单元格之间)

标签: java swing jtable jtableheader


【解决方案1】:

最简单的方法是在TableCellRenderer 中设置EmptyBorders to the JTableHeader

上面的代码做了我的间距,但标题和实际行单元格值的对齐看起来有点不对 - 因为间距只放在单元格上而不是标题上。

我添加了一个 SSCCE(3 分 27 秒,包括在此处上传)

来自代码

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class IntercellSpacingTableHeader {

    private JFrame frame = new JFrame("Table Demo");
    private String[] columnNames = {"String", "Integer", "Float", "Double"};
    private Object[][] data = {
        {"aaa", new Integer(12), new Float(12.15), new Double(100.05)},
        {"bbb", new Integer(5), new Float(7.154), new Double(6.1555)},
        {"CCC", new Integer(92), new Float(0.1135), new Double(3.1455)},
        {"ddd", new Integer(12), new Float(31.15), new Double(10.05)},
        {"eee", new Integer(5), new Float(5.154), new Double(16.1555)},
        {"fff", new Integer(92), new Float(4.1135), new Double(31.1455)}};
    private TableModel model = new DefaultTableModel(data, columnNames) {

        private static final long serialVersionUID = 1L;

        @Override
        public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        }
    };
    private JTable table = new JTable(model);

    public IntercellSpacingTableHeader() {
        int gapWidth = 10;
        int gapHeight = 5;
        table.setIntercellSpacing(new Dimension(gapWidth, gapHeight));
        table.setRowHeight(20);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scroll = new JScrollPane(table);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(scroll);
        frame.pack();
        frame.setLocation(150, 150);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new IntercellSpacingTableHeader();
            }
        });
    }
}

【讨论】:

  • 我确实尝试过,但是如果您明白我的意思,这里的要求不接受这种方法。
  • @Bitmap 我对此没有任何问题,但可能还有其他问题,您可以使用链接代码创建SSCCE,也许有人......
  • 上面的代码做了我的间距,但标题和实际行单元格值的对齐方式看起来有点不对 - 因为间距只放置在单元格上而不是标题上。
  • 我已将 gapWidth 设置为 5,并且似乎与单元格数据对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多