Question

Hi stackoverflow community. I have a problem refreshing my JTable after executing my UPDATE statement. I made a tableUpdate method in my own TableModel class but it doesn't seem to work. I call it in the ActionListener in my class below. If anyone can tell me what I am doing wrong I would appreciate it.

class MyTableModel extends AbstractTableModel {
        /**
                 *
                 */
        private static final long serialVersionUID = 1L;
        private List<Member> members = new ArrayList<Member>();

        public MyTableModel(List<Member> members) {
                this.members = members;
        }

        public void addMember(Member m) {
                members.add(m);
                int row = members.size() - 1;
                fireTableRowsInserted(row, row);
        }

        public void removeMemberFromTable(int row) {
                members.remove(row);
                fireTableRowsDeleted(row, row);
        }

        public void tableUpdate(int row, Member m) {
                members.set(row, m);
                fireTableDataChanged();
        }

        public List<Member> getMembers() {
                return new ArrayList<Member>(members);
        }

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

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

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
                Member m = members.get(rowIndex);

                switch (columnIndex) {
                case 0:
                        return m.getMemberId();

                case 1:
                        return m.getfName();

                case 2:
                        return m.getlName();

                case 3:
                        return m.getAddress();

                case 4:
                        return m.getZipCode();

                case 5:
                        return m.getCity();

                case 6:
                        return m.getEmail();

                case 7:
                        return m.getPhoneNo();

                default:
                        return "";
                }
        }

        public String getColumnName(int column) {
                switch (column) {
                case 0:
                        return "MedlemsID";

                case 1:
                        return "Fornavn";

                case 2:
                        return "Efternavn";

                case 3:
                        return "Adresse";

                case 4:
                        return "Postnummer";

                case 5:
                        return "By";

                case 6:
                        return "Email";

                case 7:
                        return "Telefonnr";
                default:
                        return "";
                }
        }

        public Class<?> getColumnClass(int columnIndex) {
                switch (columnIndex) {
                case 1:
                        return Integer.class;

                case 2:
                        return String.class;

                case 3:
                        return String.class;

                default:
                        return String.class;
                }
        }
}

editBtn.addActionListener(new ActionListener(){
                        @Override
                        public void actionPerformed(ActionEvent e) {                           
                                int zipCode = Integer.parseInt(zipCodeTF.getText());
                                Member m = new Member(fNameTF.getText(), lNameTF.getText(),
                                                addressTF.getText(), zipCode, cityTF.getText(),
                                                emailTF.getText(), phoneNoTF.getText());
                                MemberMapper mMapper = new MemberMapper();
                                int i = gui.getIndex();
                                mMapper.editMember(m, i);

                                editMemberFrame.setVisible(false);

                                List<Member> data = mMapper.selectAllMembers();
                                MyTableModel myTableModel = new MyTableModel(data);
                                int row = gui.getTable().getSelectedRow();
                                myTableModel.tableUpdate(row, m);

                        }      
                });
Was it helpful?

Solution

Take a look at this snippet...

MyTableModel myTableModel = new MyTableModel(data);
int row = gui.getTable().getSelectedRow();
myTableModel.tableUpdate(row, m);

You're creating a new table model, but it's in no way associated with the table...

I would also use fireTableRowsUpdates instead of fireTableDateChanged as its not as a dramatic an update

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top