我有一个用于输入学生考试成绩的jTable。当我在“标记”栏中输入标记时,它会根据输入的标记自动检查等级,并将其放入下一列(即“等级”),同一行。它工作正常。当您有多行输入标记时,会出现问题。我们假设有三个学生输入分数,如果你在最后一行输入分数(学生在表格中排在最后),分数将不会更新。你必须按顺序从上到下来更新成绩。帮助我。谢谢。这是我的代码:
for (int i = 0; i < jTable1.getRowCount(); i++) {
if(!(jTable1.getValueAt(i, 2).toString().equals(""))){
if(!(Integer.parseInt(jTable1.getValueAt(i, 2).toString())>100)){
String mark = jTable1.getValueAt(i, 2).toString();
int mk = Integer.parseInt(mark);
if (mk >= 75) {
jTable1.setValueAt("A", i, 3);
} else if (mk < 75 && mk >= 65) {
jTable1.setValueAt("B", i, 3);
} else if (mk < 65 && mk >= 55) {
jTable1.setValueAt("C", i, 3);
} else if (mk < 55 && mk >= 35) {
jTable1.setValueAt("S", i, 3);
} else{
jTable1.setValueAt("F", i, 3);
}}}
答案 0 :(得分:0)
我使用CellRenderer
来实现这一目标。像这样的东西。您可以扩展DefaultTableCellRenderer
实施
public class MarkCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable jTable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(jTable, value, isSelected, hasFocus, row, column);
if (c instanceof JLabel) {
JLabel label = (JLabel) c;
label.setHorizontalAlignment(JLabel.RIGHT);
Integer mk = Integer.parseInt(value.toString());//this is not very clean
String text= null;
if (mk >= 75) {
text="A";
} else if (mk < 75 && mk >= 65) {
text="B";
} else if (mk < 65 && mk >= 55) {
text="C";
} else if (mk < 55 && mk >= 35) {
text="S";
} else{
text="F";
}
label.setText(text);
}
return c;
}
}
你设置为
myTable.getColumnModel().getColumn(2).setCellRenderer(new MarkCellRenderer());