【问题标题】:jTable entering data into a columnjTable 将数据输入一列
【发布时间】:2013-12-06 13:15:12
【问题描述】:

我有一个用于输入学生考试成绩的 jTable。当我在“标记”列中输入标记时,它会根据输入的标记自动检查等级并将其放入下一列(即“等级”),同一行。它工作正常。当您有不止一行要输入标记时,就会出现问题。我们假设有三个学生输入分数,如果您在最后一行输入分数(学生在表中排在最后),则成绩不会更新。您必须按从上到下的顺序来更新 Grade 。帮我解决这个问题。谢谢。这是我的代码:

 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);
        }}}

【问题讨论】:

  • 我宁愿使用CellRenderer 来显示。作为细节而不是做两个if,你可以使用&amp;&amp;
  • 你能给我一个使用 CellRenderer 的例子吗

标签: java sql swing for-loop jtable


【解决方案1】:

我会使用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());

【讨论】:

  • @ShanakaPerera 记住 swing 组件实现 MVC 模式,因此您必须将视图与模型分开。你可以在你的表格模型中有一个数字,但在视图中显示一个字母。 :D 如果有用,请考虑投票并接受答案:)
  • @nachokk: Shanaka Perera 不能以
  • @trashgod 哦,我明白了 :( :D
  • 我觉得现在可以了。非常感谢你。
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 2016-11-07
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多