java 为 JTable 创建多行标题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2343391/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 20:42:18  来源:igfitidea点击:

Creating multi-line header for JTable

javaswingjtable

提问by miso

I use JTable GUI component with NetBeans.

我在 NetBeans 中使用 JTable GUI 组件。

  • I want to create multi-line headers

  • I am able to this, when I create custom renderer for table headers

  • BUT I don't want to, because I like default one (I use it everywhere else in program).

  • So the problem is : How to make header heigher?

  • 我想创建多行标题

  • 当我为表头创建自定义渲染器时,我能够做到这一点

  • 但我不想,因为我喜欢默认的(我在程序中的其他任何地方都使用它)。

  • 所以问题是:如何使标题更高?

My code :

我的代码:

String headers[] = new String[3];
    headers[0] = "Header1";
    headers[1] = "Header2";
    headers[2] = "<html><center>Long<br>Centered</br></center></html>";
    DefaultTableModel dtm = new DefaultTableModel();
    dtm.setColumnIdentifiers(headers);
    dtm.setRowCount(5);
    jTable1.setModel(dtm);
    jTable1.getTableHeader().setPreferredSize(
                new Dimension(jTable1.getColumnModel().getTotalColumnWidth(),32));

回答by Peter Lang

Try the following:

请尝试以下操作:

table.getTableHeader().setPreferredSize(
      new Dimension(table.getColumnModel().getTotalColumnWidth(), 32));

This will change the size of the header:

这将改变标题的大小:

alt text

替代文字

To center the text, you can use the <center>-tag:

要使文本居中,您可以使用<center>-tag:

headers[2] = "<html><center>Long Centered<br>Header";

alt text

替代文字

EDIT:

编辑

The alignment is set by your LookAndFeel. WindowsTableHeaderUIfor example explicitly calls

对齐方式由您的 LookAndFeel 设置。WindowsTableHeaderUI例如显式调用

setHorizontalAlignment(LEADING);

The easiest way to solve this is:

解决这个问题的最简单方法是:

(JLabel)table.getTableHeader().getDefaultRenderer())
      .setHorizontalAlignment(SwingConstants.CENTER);

Note that this change is lost when you change your LookAndFeel afterwards.

请注意,当您之后更改 LookAndFeel 时,此更改将丢失。

回答by RtsGeneral

hi guys i tried this and it works:

嗨,伙计们,我试过这个,它有效:

    DefaultTableCellRenderer r;

    String headers[] = new String[3];
    headers[0] = "Category";
    headers[1] = "Item";
    headers[2] = "<html><center>Packaging<br>unit</center></br></html>";
    DefaultTableModel dtm = new DefaultTableModel();
    table.setModel(dtm);
    r = (DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer();
    r.setHorizontalAlignment(JLabel.CENTER);
    dtm.setColumnIdentifiers(headers);

    table.getTableHeader().setPreferredSize(new Dimension(table.getColumnModel().getTotalColumnWidth(),32));