Swing Button mit JTable und MouseListener

JavaNewbie1

Mitglied
Hallo Leute,

habe folgendes Problem:
Ich hab hinter einem Bild einen Button versteckt, auf den ich ein MouseListener geaddet habe. So alles schön und gut. Wenn ich mit der Maus über diesen Button fahre, soll eine kleine Tabelle (JTable) erscheinen, das klappt sogar sogut, dass die Tabelle mit dem Mauszeiger "mitgeht".
Das Problem ist nur, dass für alle Pixeln eine neue Tabelle erscheint, sodass mein Button sehr schnell gefüllt ist. Auch wenn ich mein Button komplett verlasse, bleiben diese Buttons trotzdem erhalten. Wie kann ich dieses Problem denn beheben, dass sodass ich den Bereich des Button verlasse auch kein Table mehr zu sehen ist ?
Und eine weitere Frage: Meine Tabelle ist größer als mein Button, wie kann ich es packen, dass eine größere Tabelle auf einem kleineren Button trotzdem vollständig angezeigt wird ?

Ich hoffe, dass ich mein Problem einigermaßen erklären konnte und freue mich sehr auf eure Tipps.

Liebe Grüße
 
Ohne Code (wie die JTables hinzugefügt werden usw.) lässt sich schwer helfen.

Wahrscheinlich wird beim Bewegen jedesmal eine neue JTable erstellt und nicht mit der schon vorhandernen gearbeitet ==> immer das gleiche Objekt verwenden.

Wie überprüfst du denn ob sich der Cursor über den Button befindet? Mit Hilfe des MouseListener solltest du auch feststellen können ob der Cursor den Button verlassen hat, wenn ja ==> alle JTables entfernen (setVisible(false) und Referenzen entfernen wenn gewollt).
 
Erst einmal danke für deine Antwort 🙂
Also es handelt sich um ein Fenster in dem sich ein Bild (Landkarte) befindet. Hinter den einzelnen Ländern will ich unsichtbare Buttons verstecken und diesen Buttons Listener hinzufügen, um dahinter bestimmte Funktionen wie das mit dem JTable ausführen zu können. Ich dachte mir dass ich das besser mit dem MouseMotionListener mache, weil sich die Tabelle dort ganz gut "mitbewegt". Unten ist mein Code zum Listener, in der mein JTable erzeugt wird zu sehen. Ich möchte an dieser Stelle auch erwähnen, dass ich noch ein Anfänger bin und noch nicht all zu viel Erfahrung mit Swing usw. habe.

Java:
button.addMouseMotionListener(new MouseMotionListener() {
			
			@Override
			public void mouseMoved(MouseEvent e) {
				String[][] rowData = {{"xxx"}, {"yyy"}, {"zzz"}};
				String[] columnNames = {"DE"};

				JTable table = new JTable(rowData, columnNames);
				table.setSize(300, 300);
				table.setVisible(true);
				table.setLocation(e.getX(), e.getY());
				button.add(table);

			}
			
			@Override
			public void mouseDragged(MouseEvent e) {
				
			}
			
		});

Habe einfach keine Idee, wie die anderen Tabellen verschwinden sollen, wenn ich mich zwar immer noch im Buttonbereich befinde, aber nicht mehr an der gleichen Stelle wie vorher. Oder dass einfach gar keine Tabelle mehr zu sehen ist, wenn ich mich aus dem Button ganz wegbewege. Bei den MouseListenern ist es so, dass nur eine einzige Tabelle erscheint und das war's dann auch schon.
Und wie ist es denn wenn meine Tabelle größer als mein Button ist. Mein Button hat in diesem Fall die Größe (60,28) und die Tabelle ist ja deutlich größer. Weil ich die Tabelle jetzt auf mein Button setze, sieht man immer nur einen Teil der Tabelle. Wie könnte man das beheben ?
 
Zuletzt bearbeitet:
Java:
button.addMouseMotionListener(new MouseMotionListener() {
			
			@Override
			public void mouseMoved(MouseEvent e) {
				String[][] rowData = {{"xxx"}, {"yyy"}, {"zzz"}};
				String[] columnNames = {"DE"};

				JTable table = new JTable(rowData, columnNames);
				table.setSize(300, 300);
				table.setVisible(true);
				table.setLocation(e.getX(), e.getY());
				button.add(table);

			}
			
			@Override
			public void mouseDragged(MouseEvent e) {
				
			}
			
		});

Wie gesagt du erzeugst jedesmal ein neues JTable Objekt. Lässt die alten aber nicht verschwinden.
Mache aus dem JTable Objekt ein Klassenattribut. Und anstatt jedes mal ein neues Objekt zu erzeugen änderst du nur die Location!
 
Vielen Dank für deine Hilfe, hat soweit geklappt, es erscheint immer eine neue Tabelle und die alten werden gelöscht. Habe es übrigens erneut mit dem MouseListener versucht und diesmal hat's wunderbar geklappt. Nur habe ich jetzt nur noch ein kleines Problem: Und zwar wird immer nur ein Teil meiner Tabelle angezeigt, weil der Button kleiner ist als die Tabelle. Ich adde meine Tabelle nach wie vor dem Button hinzu. Gibt es irgendeine Methode die dafür sorgt, dass die Tabelle vollständig angezeigt wird und sozusagen die Grenzen des Buttons "sprengt".. Suche wie ein verrückter danach, habe aber immer noch nicht's dazu gefunden..Wenn das noch klappt, ist alles perfekt 🙂
 
Zuletzt bearbeitet:
Ich habe es soeben ausprobiert, mein JTable erscheint irgendwie gar nicht mehr, also ist nirgends sichtbar wenn ich mit der Maus über meinen Button fahre.. Und wenn ich es meinem Frame hinzufüge dann tritt das Problem auf dass sich mein Bild dann verschiebt und die Zuordnung der Buttons dann nicht mehr stimmt. :/
 

Neue Themen


Zurück
Oben