如何格式化 JTable 的内容
How to format contents of a JTable
我正在使用 JTable 来显示数字数据和字符串。数值数据默认格式位于 JTable 的右侧,字符串格式位于左侧。我希望两者都被格式化到单元格的中心。我正在使用 Nedbeans 来开发 GUI,但它似乎对解决这个问题没有帮助。
我的尝试是创建一个覆盖 JTable 默认单元格渲染器的单元格渲染器 class,但是我
不知道在新单元格渲染器中实际更改格式的代码行。
如有任何帮助,我们将不胜感激。
你的想法是正确的。在自定义 TableCellRenderer 中,您实际上可以检查呈现了哪个 column/row/cell 并随后分配 column/row/cell 特定格式。
public static class CustomTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer c = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// center everything in the first column
if (column == 0) {
c.setHorizontalAlignment(JLabel.CENTER);
}
// the background and border of the first cell should be gray
if (column == 0 && row == 0) {
c.setBackground(Color.GRAY);
c.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 5, Color.GRAY));
}
return c;
}
}
请注意,每个单元格都会调用 DefaultTableCellRenderer
。
所有可用的格式化函数在各自的文档中都有详细描述:
https://docs.oracle.com/javase/10/docs/api/javax/swing/table/DefaultTableCellRenderer.html
我正在使用 JTable 来显示数字数据和字符串。数值数据默认格式位于 JTable 的右侧,字符串格式位于左侧。我希望两者都被格式化到单元格的中心。我正在使用 Nedbeans 来开发 GUI,但它似乎对解决这个问题没有帮助。
我的尝试是创建一个覆盖 JTable 默认单元格渲染器的单元格渲染器 class,但是我 不知道在新单元格渲染器中实际更改格式的代码行。
如有任何帮助,我们将不胜感激。
你的想法是正确的。在自定义 TableCellRenderer 中,您实际上可以检查呈现了哪个 column/row/cell 并随后分配 column/row/cell 特定格式。
public static class CustomTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer c = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// center everything in the first column
if (column == 0) {
c.setHorizontalAlignment(JLabel.CENTER);
}
// the background and border of the first cell should be gray
if (column == 0 && row == 0) {
c.setBackground(Color.GRAY);
c.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 5, Color.GRAY));
}
return c;
}
}
请注意,每个单元格都会调用 DefaultTableCellRenderer
。
所有可用的格式化函数在各自的文档中都有详细描述: https://docs.oracle.com/javase/10/docs/api/javax/swing/table/DefaultTableCellRenderer.html