jTable将数据输入列

时间:2013-12-06 13:15:12

标签: java sql swing for-loop jtable

我有一个用于输入学生考试成绩的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);
        }}}

1 个答案:

答案 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());