2

我参考了一些方法。即fireTableCellUpdated的有效方式。但实际上我还是不申请。

如何在 DETA 值更新后更新表格内容。

该方法我称之为GJJ方法实现。虽然更新了但是出现了很多新的窗口。这不是我的需要。

告诉我如何在新窗口中添加按钮和监听按钮来执行更新行为的朋友告诉我怎么做。

         class MyTable extends AbstractTableModel {

    Object p[][]={  
                {DETA_1_1,DETA_1_2, DETA_1_3, DETA_1_4, DETA_1_5},
                {DETA_2_1,DETA_2_2, DETA_2_3, DETA_2_4, DETA_2_5},
                {DETA_3_1,DETA_3_2, DETA_3_3, DETA_3_4, DETA_3_5},
                {DETA_4_1,DETA_4_2, DETA_4_3, DETA_4_4, DETA_4_5},
                {DETA_5_1,DETA_5_2, DETA_5_3, DETA_5_4, DETA_5_5},
                {DETA_6_1,DETA_6_2, DETA_6_3, DETA_6_4, DETA_6_5},
                {DETA_7_1,DETA_7_2, DETA_7_3, DETA_7_4, DETA_7_5},
                {DETA_8_1,DETA_8_2, DETA_8_3, DETA_8_4, DETA_8_5},  
                {DETA_9_1,DETA_9_2,DETA_9_3,DETA_9_4,DETA_9_5},  
                {DETA_10_1,DETA_10_2,DETA_10_3,DETA_10_4,DETA_10_5},  
                {DETA_11_1,DETA_11_2,DETA_11_3,DETA_11_4,DETA_11_5},  
                {DETA_12_1,DETA_12_2,DETA_12_3,DETA_12_4,DETA_12_5},  
                {DETA_1_3_1,DETA_1_3_2,DETA_1_3_3,DETA_1_3_4,DETA_1_3_5},  
                {DETA_1_4_1,DETA_1_4_2, DETA_1_4_3, DETA_1_4_4, DETA_1_4_5},  
                {DETA_15_1,DETA_15_2,DETA_15_3,DETA_15_4,DETA_15_5},  
                {DETA_16_1,DETA_16_2,DETA_16_3,DETA_16_4,DETA_16_5},  
                {DETA_17_1,DETA_17_2,DETA_17_3,DETA_17_4,DETA_17_5},  
                {DETA_1_8_1,DETA_1_8_2,DETA_1_8_3,DETA_1_8_4,DETA_1_8_5},  
                {DETA_19_1,DETA_19_2,DETA_19_3,DETA_19_4,DETA_19_5}  
            };  
    String[] n = { "NO","CARD","NAME","NAME2","time" };

    public int getColumnCount() {
        return n.length;
    }

    public int getRowCount() {
        return p.length;
    }

    public String getColumnName(int col) {
        return n[col];
    }

    public Object getValueAt(int row, int col) {
        return p[row][col];
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

}

   private void GJJ() {
    JFrame f = new JFrame();
    MyTable mt = new MyTable();
    JTable t = new JTable(mt);

    t.setPreferredScrollableViewportSize(new Dimension(550, 30));
    JScrollPane s = new JScrollPane(t);
    f.getContentPane().add(s, BorderLayout.CENTER);
    f.setTitle("coolman");
    f.pack();
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);

        }
    });

}
4

1 回答 1

5

你的问题有点含糊。“更新”表模型可能是更新现有模型(即编辑数据)和/或添加新行。

我已经做了一个简单的例子。

编辑行时,模型和表格会自行更新它们,所以你不需要做任何事情,但是,如果你添加或删除行,你将自己负责触发更新事件。

public class TestTableModel {

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

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

                final MyTableModel tableModel = new MyTableModel();
                final JTable table = new JTable(tableModel);

                JButton addButton = new JButton("Add");
                addButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        tableModel.add();
                    }
                });
                JButton updateButton = new JButton("Update");
                updateButton.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int row = table.getSelectedRow();
                        if (row > -1) {
                            table.setValueAt("Banana", row, 0);
                        }
                    }
                });

                JPanel buttonPane = new JPanel();
                buttonPane.add(addButton);
                buttonPane.add(updateButton);

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(table));
                frame.add(buttonPane, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class Person {

        private String name;
        private int age;

        public Person() {
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public int getAge() {
            return age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setAge(int age) {
            this.age = age;
        }

    }

    public class MyTableModel extends AbstractTableModel {

        private List<Person> lstPeople;

        public MyTableModel() {
            lstPeople = new ArrayList<Person>(25);
            lstPeople.add(new Person("Darryl Garton", randomAge()));
            lstPeople.add(new Person("Neil Willison", randomAge()));
            lstPeople.add(new Person("Darryl Hege", randomAge()));
            lstPeople.add(new Person("Karina Jerry", randomAge()));
            lstPeople.add(new Person("Erik Leddy", randomAge()));
            lstPeople.add(new Person("Chandra Kehrer", randomAge()));
            lstPeople.add(new Person("Katy Sapien", randomAge()));
            lstPeople.add(new Person("Lonnie Blakes", randomAge()));
            lstPeople.add(new Person("Kelly Ruocco", randomAge()));
            lstPeople.add(new Person("Fernando Mckinnie", randomAge()));
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return true;
        }

        protected int randomAge() {

            return (int)Math.round(Math.random() * 99) + 1;

        }

        @Override
        public int getRowCount() {
            return lstPeople.size();
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public String getColumnName(int column) {
            String name = null;
            switch (column) {
                case 0:
                    name = "Name";
                    break;
                case 1:
                    name = "Age";
                    break;
            }
            return name;
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            Class clazz = String.class;
            switch (columnIndex) {
                case 1:
                    clazz = Integer.class;
                    break;
            }
            return clazz;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            Object value = null;
            Person person = lstPeople.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    value = person.getName();
                    break;
                case 1:
                    value = person.getAge();
                    break;
            }
            return value;
        }

        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            Person person = lstPeople.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    if (aValue instanceof String) {
                        person.setName(aValue.toString());
                    }
                    break;
                case 1:
                    if (aValue instanceof Integer) {
                        person.setAge((Integer)aValue);
                    }
                    break;
            }
            fireTableCellUpdated(rowIndex, columnIndex);
        }

        public void add() {

            lstPeople.add(new Person());
            fireTableRowsInserted(lstPeople.size() - 1, lstPeople.size() - 1);

        }

    }

}

您可能想阅读如何使用表格以获取更多信息

于 2012-11-22T04:30:12.873 回答