Fügen Sie Text und Symbol (mit Mouselistener) auf JTable Spalte
-
19-09-2019 - |
Frage
Ich möchte folgende Funktionen implementieren, aber ich bin verwirrt, wenn es in Java möglich ist. Wenn ja, als wie? Bitte Hilfe:
Ich möchte eine JTable Art von Tisch zu schaffen, in der 1. Reihe der Tabelle Spaltennamen enthält, und ein Symbol in jeder Spalte das heißt in jeder Zelle der ersten Reihe. Ein Klick auf das Symbol sollte auf die Entfernung von dieser Spalte aus der Tabelle (möglich mit Mouselistener ??) führen.
Ich habe viele Lösung gefunden, wo ich Schaltfläche in eine Zelle in JTable hinzufügen können, aber keine, die sowohl das Hinzufügen von Text und Symbol beschreibt (mit Mouselistener) zu einer Zelle. Bitte beachten Sie, wenn Sie helfen können, und vielen Dank für das Lesen.
Lösung
Sie können eine benutzerdefinierte TableCellRenderer
erstellen, die JLabel
erstreckt. Diese JLabel
kann mit einem Symbol erstellt werden (JLabel
können Symbole angezeigt werden, nach rechts oder links des Textes). Sie werden die getTableCellRendererComponent
testen wollen, ob die Zeile gerendert wird die erste ist oder nicht, und wenn ja, auf das Symbol gesetzt, andernfalls nicht.
Für die Entfernung Aktion können Sie eine MouseListener
auf dem Tisch hinzufügen, und wenn die mouseClicked
Methode der Verarbeitung, können Sie die Zelle finden, die durch die Prüfung der rowAtPoint
und columnAtPoint
in durch die Schaffung eines Point
vom mouseEvent.getX()
und mouseEvent.getY()
geklickt wurde. Wenn Sie die erste Zeile bestimmen, die mit dem Symbol geklickt wurde, können Sie die Spalte aus der Spalte Modell entfernen.
Wenn durch 1. Reihe , die Sie tatsächlich den Tabellenkopf bedeuten, können Sie den gleichen Renderer für das JTableHeader
erstellen, und stellen Sie die MouseListener
auf die Komponente.
Andere Tipps
Nun, ich verstehe Ihre Frage nicht.
Ich möchte eine JTable Art zu schaffen, Tisch, wo 1. Zeile der Tabelle enthält Spaltennamen und ein Symbol
Haben Sie den Tabellenkopf bedeuten, wie die Art und Weise funktioniert durch die Anzeige des Spaltennamen und die Sortierrichtung Sortier?
Wenn ja Sie dann einen benutzerdefinierten Renderer für den Tabellenkopf verwenden und einen Mouselistener an die Header hinzufügen, um zu bestimmen, welche Spalte geklickt wurde. Sie sollten den Standardtabellenkopf Renderer anpassen können, zu tun, was Sie wollen.
Oder haben Sie die erste Zeile der Daten in der Tabelle bedeuten. Wenn ja, dann müssen Sie noch einen benutzerdefinierten Renderer verwenden, aber dieses Mal, wenn Sie die Mouselistener in der Tabelle nicht der Tabellenkopf hinzuzufügen.
In beiden Fällen können Sie den TableColumnModel.removeColumn () -Methode verwenden, um die Spalte aus der Sicht der Tabelle zu entfernen.