java - 无法从 JTable 更新单元格

标签 java jtable

我一直在尝试找到一种通过直接输入来更新单元格的方法。根据我的研究,每个人似乎都说你必须使用

myJTable.fireTableCellUpdated()

尽管如此,它一直要求我转换 myJTable --> 它不能转换为 AbstractTableModel,据我所知,这是需要的。

这是我当前的表代码(如果有帮助的话):

    myJTable= new JTable();

    myJTable.setModel(new DefaultTableModel(
        new Object[][] {
            {null, null, null},
        },
        new String[] {
            "Thing#1", "Thing#2", "Thing#3"
        }
    ));

    myJTable.getModel().addTableModelListener(new TableModelListener() { 
         public void tableChanged(TableModelEvent e) { 
             myJTable.fireTableCellUpdated(e.getFirstRow(), e.getColumn());
             myJTable.repaint(tblCG.getCellRect(e.getFirstRow(), e.getColumn(), false));
             myJTable.putClientProperty("terminatedEditOnFocusLost", true);
         } 
         });

我如何保存通过用户直接输入更新的单元格中的数据? 谢谢!

最佳答案

根据您想要执行的操作,您可以使用...

例如...

enter image description here

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    private JTable myJTable;

    private String values[] = {"Orange", "Green", "Blue", "Pink", "Yellow"};
    private int count;

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                myJTable = new JTable();

                myJTable.setModel(new DefaultTableModel(
                                new Object[][]{{"Banana", "Yellow"}},
                                new Object[]{"Fruit", "Color"}
                ));

                JButton change = new JButton("Change");
                change.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        count++;
                        String value = values[Math.abs(count % values.length)];
                        myJTable.setValueAt(value, 0, 1);
                    }

                });
                JButton add = new JButton("add");
                add.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        DefaultTableModel model = (DefaultTableModel) myJTable.getModel();
                        model.addRow(new Object[]{"Apple " + model.getRowCount(), "Green"});
                    }

                });
                JButton delete = new JButton("delete");
                delete.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int rowIndex = myJTable.getSelectedRow();
                        rowIndex = myJTable.convertRowIndexToModel(rowIndex);
                        if (rowIndex > 0) {
                            DefaultTableModel model = (DefaultTableModel) myJTable.getModel();
                            model.removeRow(rowIndex);
                        }
                    }

                });

                JPanel actions = new JPanel();
                actions.add(change);
                actions.add(add);
                actions.add(delete);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(myJTable));
                frame.add(actions, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

如果您自己以某种方式自定义了该类,则您应该只需要调用帮助器 fireXxx 事件方法之一,并且只能从类上下文中调用,不应从外部触发它们,这是实现类的责任来做到这一点

所以,没有额外的代码......

Editing

默认情况下内置单元格编辑...

看...

了解更多详情...

关于java - 无法从 JTable 更新单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052514/

相关文章:

java - 写数组作为参数Java

java - 在android中使用反射的缺点?

java - 向 Java 类添加 GUI 功能

java - 需要一些建议 : I want to add and display objects in an ArrayList using jTable, 然后将这些记录添加到 SQL 数据库

java - 从数组更新 JPanel

java - 创建自定义表模型以提供 ArrayList 中的数据

java - GUI 测试 Java Swing 应用程序

java - 优化MySQL更新查询

java - 在 JTable 中搜索

Java:JTable 添加和移动列