1 import javax.swing.*;
2 import javax.swing.table.*;
3 import javax.swing.event.*;
4 import java.awt.*;
5 import java.awt.event.*;
6 import javax.sql.*;
7 import com.sun.rowset.CachedRowSetImpl;
8
9 public class TableEditor extends JPanel {
10 private JButton jbtFirst = new JButton("First");
11 private JButton jbtNext = new JButton("Next");
12 private JButton jbtPrior = new JButton("Prior");
13 private JButton jbtLast = new JButton("Last");
14 private JButton jbtDelete = new JButton("Delete");
15 private JButton jbtCommit = new JButton("Commit");
16 private JLabel jlblStatus = new JLabel();
17
18
19 private RowSetTableModel tableModel = new RowSetTableModel();
20 private DefaultListSelectionModel listSelectionModel =
21 new DefaultListSelectionModel();
22 private JTable jTable1 = new JTable();
23 private RowSet rowSet;
24
25
26 public void setRowSet(RowSet rowSet) {
27 this.rowSet = rowSet;
28 tableModel.setRowSet(rowSet);
29 jTable1.setModel(tableModel);
30
31
32 TableRowSorter<TableModel> sorter =
33 new TableRowSorter<TableModel>(tableModel);
34 jTable1.setRowSorter(sorter);
35 }
36
37
38 public TableEditor() {
39 JPanel jPanel1 = new JPanel();
40 jPanel1.add(jbtFirst);
41 jPanel1.add(jbtNext);
42 jPanel1.add(jbtPrior);
43 jPanel1.add(jbtLast);
44 jPanel1.add(jbtDelete);
45 jPanel1.add(jbtCommit);
46
47 setLayout(new BorderLayout());
48 add(jPanel1, BorderLayout.NORTH);
49 add(new JScrollPane(jTable1), BorderLayout.CENTER);
50 add(jlblStatus, BorderLayout.SOUTH);
51
52
53 jTable1.setSelectionModel(listSelectionModel);
54
55
56 jbtFirst.addActionListener(new ActionListener() {
57 @Override
58 public void actionPerformed(ActionEvent evt) {
59 moveCursor("first");
60 }
61 });
62 jbtNext.addActionListener(new ActionListener() {
63 @Override
64 public void actionPerformed(ActionEvent evt) {
65 moveCursor("next");
66 }
67 });
68 jbtPrior.addActionListener(new ActionListener() {
69 @Override
70 public void actionPerformed(ActionEvent evt) {
71 moveCursor("previous");
72 }
73 });
74 jbtLast.addActionListener(new ActionListener() {
75 @Override
76 public void actionPerformed(ActionEvent evt) {
77 moveCursor("last");
78 }
79 });
80 jbtDelete.addActionListener(new ActionListener() {
81 @Override
82 public void actionPerformed(ActionEvent evt) {
83 delete();
84 }
85 });
86 jbtCommit.addActionListener(new ActionListener() {
87 @Override
88 public void actionPerformed(ActionEvent evt) {
89 try {
90 ((CachedRowSetImpl)rowSet).acceptChanges();
91 }
92 catch (java.sql.SQLException ex) {
93 ex.printStackTrace();
94 }
95 }
96 });
97 listSelectionModel.addListSelectionListener(
98 new ListSelectionListener() {
99 @Override
100 public void valueChanged(ListSelectionEvent e) {
101 handleSelectionValueChanged(e);
102 }
103 });
104 }
105
106
107 private void delete() {
108 try {
109
110 int currentRow = rowSet.getRow();
111 rowSet.deleteRow();
112 if (rowSet.isAfterLast())
113 rowSet.last();
114 else if (rowSet.getRow() >= currentRow)
115 rowSet.absolute(currentRow);
116 setTableCursor();
117 }
118 catch (java.sql.SQLException ex) {
119 jlblStatus.setText(ex.toString());
120 }
121 }
122
123
124 private void setTableCursor() throws java.sql.SQLException {
125 int row = rowSet.getRow();
126 listSelectionModel.setSelectionInterval(row - 1, row - 1);
127 jlblStatus.setText("Current row number: " + row);
128 }
129
130
131 private void moveCursor(String whereToMove) {
132 try {
133 if (whereToMove.equals("first"))
134 rowSet.first();
135 else if (whereToMove.equals("next") && !rowSet.isLast())
136 rowSet.next();
137 else if (whereToMove.equals("previous") && !rowSet.isFirst())
138 rowSet.previous();
139 else if (whereToMove.equals("last"))
140 rowSet.last();
141 setTableCursor();
142 }
143 catch (java.sql.SQLException ex) {
144 jlblStatus.setText(ex.toString());
145 }
146 }
147
148
149 private void handleSelectionValueChanged(ListSelectionEvent e) {
150 int selectedRow = jTable1.getSelectedRow();
151
152 try {
153 if (selectedRow != -1) {
154 rowSet.absolute(selectedRow + 1);
155 setTableCursor();
156 }
157 }
158 catch (java.sql.SQLException ex) {
159 jlblStatus.setText(ex.toString());
160 }
161 }
162 }