Probleme bei Rechtsklick in die jTable

Marguerida

Grünschnabel
Hallo,

ich habe Probleme mit meiner JTable. Ich möchte, das sich mit einem rechten Mausklick ein PopUpMenu öffnet, ich dann dort was anklicken kann und er dann ein PopUpWindow öffnet.

Das PopUpMenu einzubauen war kein Problem, funktioniert auch soweit gut. Die Schwierigkeit ist, das ich Daten aus der Tabelle brauche. Bis jetzt habe ich diese Daten mit der Abfrage table.getSelectedRow(); gekriegt, das ist bei einem Klick mit der rechten Maustaste aber nicht möglich.

Wisst Ihr, wie ich entweder die Zeile markieren kann, nachdem ich dort mit Rechts draufgeklickt habe, oder wie ich anders an die Zeile komme?

Ich hoffe ihr könnt mir helfen,

Rida (*verzweifelt bin*)
 
Zuletzt bearbeitet:
Ich hab mir mal fürs SWT ne Methode geschrieben, mit der ich mit der rechten Maustaste auch eine Auswahl machen konnte.
Du musst wissen wie hoch deine Zeilen in Pixeln sind (bei mir warns damals 12.5), einen MouseListener hinzufügen und dir dann beim klick die Mausposition innerhalb der Komponente (deiner Tabelle) geben lassen.
Code:
row = y-Position / Zeilenhöhe;
...
table.setSelectedRow(row - 1) oder so ähnlich
 
Hab wie immer keine Zeit, das selbst herauszuklamüsern, aber was liefert Dir denn

getComponentAt(mouseEventPosition) ?

IIRC kommt man so weiter.
 
Hallo!

Code:
/**
 * 
 */
package de.tutorials.training;

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;

/**
 * @author Darimont
 * 
 */
public class JTableExample extends JFrame {

	private JTable table;

	public JTableExample() {
		super("JTableExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Object[][] rowData = { { "1", "a", "c" }, { "2", "b", "b" },
				{ "3", "f", "r" }, { "4", "q", "a" }, { "5", "w", "z" },
				{ "6", "c", "a" }, { "7", "a", "q" } };

		final Object[] columnHeaders = { "ID", "Header1", "Header2" };

		table = new JTable(rowData, columnHeaders);

		table.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent evt) {
				if (SwingUtilities.isRightMouseButton(evt)) {
					Point p = evt.getPoint();

					int row = table.rowAtPoint(p);
					int column = table.columnAtPoint(p);

					System.out.println(table.getValueAt(row, column));
				}
			}
		});

		add(new JScrollPane(table));

		pack();
		setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new JTableExample();
	}
}

Gruß Tom
 
Snape hat gesagt.:
Hab wie immer keine Zeit, das selbst herauszuklamüsern, aber was liefert Dir denn

getComponentAt(mouseEventPosition) ?

Das liefert mir die ganze Tabelle.

So, jetzt werde ich erst einmal gucken, ob ich mit den anderen Vorschlägen weiter komme. Danke erst einmal
 
Thomas Darimont hat gesagt.:
Hallo!

Code:
int row = table.rowAtPoint(p);
int column = table.columnAtPoint(p);

Gruß Tom

Stimmt, manchmal/meistens ist es einfacher als man vermutet.
Und ich sollte mir wohl endlich Tai-Ginseng verschreiben lassen, damit ich mich auch beim nächsten Mal noch dran erinnern kann. :mad:
 
Snape hat gesagt.:
Stimmt, manchmal/meistens ist es einfacher als man vermutet.
Und ich sollte mir wohl endlich Tai-Ginseng verschreiben lassen, damit ich mich auch beim nächsten Mal noch dran erinnern kann. :mad:

DANKE! Ich glaub es nicht, ich habe die API zig mal durchgelesen und das ganze nicht gefunden *argh* *bessere brille brauch*

So, jetzt muss ich nur noch rauskriegen, warum mein TableSorter nicht sortiert und wie ich die Spaltenbreite automatisch anpassen kann, dann bin ich fertig

(PS: Tai-Ginseng hilft auch nicht immer, bestes Beispiel mein Bruder, den meine Mutter mit dem Zeug abfüllt)
 
Zuletzt bearbeitet:
Ich habe schon versucht den TableSorter einzubauen, aber aus irgendeinem Grund sortiert er meine Tabelle nicht. Die kleinen Pfeile erscheinen zwar im Header, aber mehr passiert nicht.

Ich habe die Klasse TableSorter kopiert und in mein Programm eingefügt, aufgerufen habe ich das auch so mit den 3 beschriebenen Zeilen.

Einziger Unterschied: statt "MyTableModel" Benutze ich mein TableModel. (abgeleitet vom DefaultTableModel mit dem einzigen Unterschied:
Code:
   public boolean isCellEditable(int row, int col) { 
    return false; 
  }

Könnte es daran liegen?
 
Nein. Möglicherweise ist bei Dir etwas nicht Comparable, was es aber zwecks Sortierung sein sollte.
 
Zurück