Wie kann eine Tabellenspalte zur Laufzeit ermittelt werden?
Der MouseListener
liefert die Position des Cursors
als Point
-Objekt. Über sie kann dann die
Spalte bestimmt werden.
Im Beispiel wird in einem JFrame
als
Anwendungsfenster eine einfache, leere Tabelle in Form einer JTable
erzeugt. Über die Methode getTableHeader()
wird der Header mit den Titeln der Tabellenspalten ermittelt.
Sowohl die Tabelle selbst, als auch der Header werden bei einem
MouseListener
hier in Form eines MouseAdapter
angemeldet. Er ruft beim Entlasten der Maustaste die Methode writePos()
auf. Ihr werden das Point
-Objekt der Mausposition
und das Tabellenobjekt selbst als Parameter übergeben.
In der Methode werden dann auf unterschiedliche Art und Weise die Spalte und im letzten Fall auch die selektierte Zeile ermittelt und ausgegeben.
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class GetTableColumn {
public GetTableColumn() {
initGUI();
}
public void initGUI() {
final JFrame frame = new JFrame("Tabellenspalte ermitteln");
JTable table = new JTable(new DefaultTableModel(25, 5));
table.setShowGrid(true);
table.setBackground(Color.LIGHT_GRAY);
frame.add(new JScrollPane(table));
table.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
Point p = e.getPoint();
writePos(table, p);
}
});
table.getTableHeader().addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
Point p = e.getPoint();
writePos(table, p);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void writePos(JTable table, Point p) {
// Spaltenname über den Header auslesen
System.out.println("Spaltentitel: " + table.getModel()
.getColumnName(table.getTableHeader().columnAtPoint(p)));
// Spaltenname über das Tabellenmodell auslesen
System.out.println("Spaltentitel: "
+ table.getModel().getColumnName(table.columnAtPoint(p)));
// Spaltenindex über den Tabellenheader und das Spaltenmodell auslesen
System.out.println("Spaltenindex: " + table.getTableHeader()
.getColumnModel().getColumnIndexAtX(p.x));
// Spalten- und Reihenindex über die selektierte Reihe und Spalte
// auslesen
System.out.println("Reihe: " + table.getSelectedRow() + ", Spalte: "
+ table.getSelectedColumn());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GetTableColumn());
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.