在 Class breaks/skips 列 Table 单元格渲染器中定义整数?
Defining Integers in Column Class breaks/skips the Table Cell Renderer?
在设法通过定义列对我的列进行排序后 类 - 我的单元格渲染现在仅适用于包含字符串值的列而不适用于整数列?
This is what it looks like: ("% of target reached" is the Integer Column seen as white - should not be white)
这向您展示了字符串和整数的列 class 定义 类:
JTable compTable5 = new JTable();
compTable5.setEnabled(false);
DefaultTableModel model5 = new DefaultTableModel(){
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return Integer.class;
default:
return String.class;
}
}
};
这是渲染器
compTable5.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
int status = (int)table.getValueAt(row, 1);
String status2 = (String)table.getValueAt(row, 5);
if ("Not Used".equals(status2)) {setBackground(Color.lightGray);setForeground(Color.black);}
else if (status2.equals("Priority 1")) {setBackground(scaleRed);}
else if ( status == 0 && !status2.equals("Working") && !status2.equals("Not Used") && !status2.equals("Priority 1")) {setBackground(pink);setForeground(Color.black);}
else if (status < 20) {setBackground(scaleRed);}
else if (status >= 20 && status < 40) {setBackground(scaleOrange);setForeground(Color.black);}
else if (status >= 40 && status < 60) {setBackground(scaleYellow);setForeground(Color.black);}
else if (status >= 60 && status < 80) {setBackground(scaleGreen1);setForeground(Color.black);}
else if (status >= 80 && status < 100) {setBackground(scaleGreen2);setForeground(Color.black);}
else if (status > 100) {setBackground(scaleBlue);setForeground(Color.white);}
else {
setBackground(table.getBackground());
setForeground(table.getForeground());
}
return this;
}
});
我是一个 java 菜鸟,这是我的第一个 Whosebug post,感谢你们在这个论坛上给予我的所有帮助!
JTable
很可能对整数(和双精度、浮点数、长整型)使用特殊的 TableCellRenderer
来显示值右对齐而不是默认的左对齐。
您将 DefaultTableCellRenderer
绑定到 Object.class
,如果找不到更专门的 TableCellRenderer,这是一个后备。
尝试将 DefaultTableCellRenderer 绑定到 Object.class
和 Integer.class
,如下所示:
DefaultTableCellRenderer myRenderer = new DefaultTableCellRenderer() {
// all your code for the cell renderer, as in your example
}
compTable5.setDefaultRenderer(Object.class, myRenderer);
compTable5.setDefaultRenderer(Integer.class, myRenderer);
在设法通过定义列对我的列进行排序后 类 - 我的单元格渲染现在仅适用于包含字符串值的列而不适用于整数列?
This is what it looks like: ("% of target reached" is the Integer Column seen as white - should not be white)
这向您展示了字符串和整数的列 class 定义 类:
JTable compTable5 = new JTable();
compTable5.setEnabled(false);
DefaultTableModel model5 = new DefaultTableModel(){
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return Integer.class;
default:
return String.class;
}
}
};
这是渲染器
compTable5.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
int status = (int)table.getValueAt(row, 1);
String status2 = (String)table.getValueAt(row, 5);
if ("Not Used".equals(status2)) {setBackground(Color.lightGray);setForeground(Color.black);}
else if (status2.equals("Priority 1")) {setBackground(scaleRed);}
else if ( status == 0 && !status2.equals("Working") && !status2.equals("Not Used") && !status2.equals("Priority 1")) {setBackground(pink);setForeground(Color.black);}
else if (status < 20) {setBackground(scaleRed);}
else if (status >= 20 && status < 40) {setBackground(scaleOrange);setForeground(Color.black);}
else if (status >= 40 && status < 60) {setBackground(scaleYellow);setForeground(Color.black);}
else if (status >= 60 && status < 80) {setBackground(scaleGreen1);setForeground(Color.black);}
else if (status >= 80 && status < 100) {setBackground(scaleGreen2);setForeground(Color.black);}
else if (status > 100) {setBackground(scaleBlue);setForeground(Color.white);}
else {
setBackground(table.getBackground());
setForeground(table.getForeground());
}
return this;
}
});
我是一个 java 菜鸟,这是我的第一个 Whosebug post,感谢你们在这个论坛上给予我的所有帮助!
JTable
很可能对整数(和双精度、浮点数、长整型)使用特殊的 TableCellRenderer
来显示值右对齐而不是默认的左对齐。
您将 DefaultTableCellRenderer
绑定到 Object.class
,如果找不到更专门的 TableCellRenderer,这是一个后备。
尝试将 DefaultTableCellRenderer 绑定到 Object.class
和 Integer.class
,如下所示:
DefaultTableCellRenderer myRenderer = new DefaultTableCellRenderer() {
// all your code for the cell renderer, as in your example
}
compTable5.setDefaultRenderer(Object.class, myRenderer);
compTable5.setDefaultRenderer(Integer.class, myRenderer);