英文:
How to format contents of a JTable
问题
我正在使用JTable来显示数值数据和字符串。数值数据默认格式显示在JTable的右侧,而字符串格式显示在左侧。我希望两者都能格式化为单元格的中心。我正在使用NetBeans开发GUI,但似乎对于这个问题没有帮助。
我的尝试是创建一个单元格渲染器类,覆盖JTable默认的单元格渲染器,但我不知道实际上要在新的单元格渲染器中更改格式的代码行。
任何帮助将不胜感激。
英文:
I am using a JTable to display numerical data and strings. The numerical data default formats to the right hand side of the JTable, and the strings format to the left. I want both to be formatted into the center of the cell. I am using Nedbeans to develop the GUI but it does not seem to help with this issue.
My attempt was to create a cell renderer class that overrides the JTable default cell renderer, but I
don't know the line of code to actually change the formatting in the new cell renderer.
Any help would be appreciated.
答案1
得分: 1
你的思路是正确的。在自定义的TableCellRenderer内部,实际上可以检查渲染的是哪一列/行/单元格,然后相应地分配特定于列/行/单元格的格式。
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);
// 将第一列中的内容居中
if (column == 0) {
c.setHorizontalAlignment(JLabel.CENTER);
}
// 第一个单元格的背景和边框应为灰色
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
英文:
Your thinking is correct. Within the custom TableCellRenderer, you can actually check which column/row/cell is rendered and subsequently assign a column/row/cell specific formatting.
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;
}
}
Please note that the DefaultTableCellRenderer
is called for each individual cell.
All available formatting functions are well described in the respective documentation:
https://docs.oracle.com/javase/10/docs/api/javax/swing/table/DefaultTableCellRenderer.html
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论