import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.sql.*;
import com.sun.rowset.CachedRowSetImpl;
public class TableEditor extends JPanel {
private JButton jbtFirst = new JButton("First");
private JButton jbtNext = new JButton("Next");
private JButton jbtPrior = new JButton("Prior");
private JButton jbtLast = new JButton("Last");
private JButton jbtDelete = new JButton("Delete");
private JButton jbtCommit = new JButton("Commit");
private JLabel jlblStatus = new JLabel();
private RowSetTableModel tableModel = new RowSetTableModel();
private DefaultListSelectionModel listSelectionModel =
new DefaultListSelectionModel();
private JTable jTable1 = new JTable();
private RowSet rowSet;
public void setRowSet(RowSet rowSet) {
this.rowSet = rowSet;
tableModel.setRowSet(rowSet);
jTable1.setModel(tableModel);
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(tableModel);
jTable1.setRowSorter(sorter);
}
public TableEditor() {
JPanel jPanel1 = new JPanel();
jPanel1.add(jbtFirst);
jPanel1.add(jbtNext);
jPanel1.add(jbtPrior);
jPanel1.add(jbtLast);
jPanel1.add(jbtDelete);
jPanel1.add(jbtCommit);
setLayout(new BorderLayout());
add(jPanel1, BorderLayout.NORTH);
add(new JScrollPane(jTable1), BorderLayout.CENTER);
add(jlblStatus, BorderLayout.SOUTH);
jTable1.setSelectionModel(listSelectionModel);
jbtFirst.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
moveCursor("first");
}
});
jbtNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
moveCursor("next");
}
});
jbtPrior.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
moveCursor("previous");
}
});
jbtLast.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
moveCursor("last");
}
});
jbtDelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
delete();
}
});
jbtCommit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
try {
((CachedRowSetImpl)rowSet).acceptChanges();
}
catch (java.sql.SQLException ex) {
ex.printStackTrace();
}
}
});
listSelectionModel.addListSelectionListener(
new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
handleSelectionValueChanged(e);
}
});
}
private void delete() {
try {
int currentRow = rowSet.getRow();
rowSet.deleteRow();
if (rowSet.isAfterLast())
rowSet.last();
else if (rowSet.getRow() >= currentRow)
rowSet.absolute(currentRow);
setTableCursor();
}
catch (java.sql.SQLException ex) {
jlblStatus.setText(ex.toString());
}
}
private void setTableCursor() throws java.sql.SQLException {
int row = rowSet.getRow();
listSelectionModel.setSelectionInterval(row - 1, row - 1);
jlblStatus.setText("Current row number: " + row);
}
private void moveCursor(String whereToMove) {
try {
if (whereToMove.equals("first"))
rowSet.first();
else if (whereToMove.equals("next") && !rowSet.isLast())
rowSet.next();
else if (whereToMove.equals("previous") && !rowSet.isFirst())
rowSet.previous();
else if (whereToMove.equals("last"))
rowSet.last();
setTableCursor();
}
catch (java.sql.SQLException ex) {
jlblStatus.setText(ex.toString());
}
}
private void handleSelectionValueChanged(ListSelectionEvent e) {
int selectedRow = jTable1.getSelectedRow();
try {
if (selectedRow != -1) {
rowSet.absolute(selectedRow + 1);
setTableCursor();
}
}
catch (java.sql.SQLException ex) {
jlblStatus.setText(ex.toString());
}
}
}