In this post, two seperated ListSelectionListener, MyRowListener and MyColListener, are implemented and added to jTable.getSelectionModel() and jTable.getColumnModel().getSelectionModel(), to monitor individual cell selected .
![]() |
| Detect selection on individual cell in JTable |
package javamyframe;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Label;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaMyFrame extends JFrame {
Label labelInfo;
JTable jTable;
ListSelectionModel listSelectionModel;
static final String DayOfWeek[] = {
"Monday",
"Tuesday",
"Wednesday",
"Thursday"};
Object[][] tableData = {
{1, 2, 3, 4},
{4, 3, 2, 1},
{12, 20, 13, 14},
{13, 29, 23, 24},
{2, 4, 6, 8},
{11, 21, 33, 4}};
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
createAndShowGUI();
});
}
private static void createAndShowGUI() {
JavaMyFrame myFrame = new JavaMyFrame();
myFrame.setTitle("java-buddy.blogspot.com");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.prepareUI();
myFrame.pack();
myFrame.setVisible(true);
}
private void prepareUI(){
JPanel vPanel = new JPanel();
vPanel.setLayout(new BoxLayout(vPanel, BoxLayout.Y_AXIS));
jTable = new JTable(tableData, DayOfWeek);
jTable.setMaximumSize(new Dimension(10,10));
listSelectionModel = jTable.getSelectionModel();
jTable.getSelectionModel()
.addListSelectionListener(new MyRowListener());
jTable.getColumnModel().getSelectionModel()
.addListSelectionListener(new MyColListener());
jTable.setSelectionModel(listSelectionModel);
jTable.setFillsViewportHeight(true);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.setPreferredSize(new Dimension(450, 100));
vPanel.add(jScrollPane);
labelInfo = new Label();
vPanel.add(labelInfo);
getContentPane().add(vPanel, BorderLayout.CENTER);
}
private class MyRowListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
System.out.println("valueChanged: " + e.toString());
int row = jTable.getSelectedRow();
int col = jTable.getSelectedColumn();
int selectedItem = (int)jTable.getValueAt(row, col);
labelInfo.setText("MyRowListener: "
+ row + " : " + col + " = " + selectedItem);
}
}
}
private class MyColListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
System.out.println("valueChanged: " + e.toString());
int row = jTable.getSelectedRow();
int col = jTable.getSelectedColumn();
int selectedItem = (int)jTable.getValueAt(row, col);
labelInfo.setText("MyColListener: "
+ row + " : " + col + " = " + selectedItem);
}
}
}
}
Next: JTable with TableModel

No comments:
Post a Comment