Frage von gut4fr5g4, 20

JavaFX Tooltip funktioniert nicht?

Ich habe probiert ein Tooltip zu adden und nichts funktoniert... http://hastebin.com/umefavuboz.scala

Bitte helfen, danke im vorraus! :D

Expertenantwort
von KnusperPudding, Community-Experte für Java, 5

Das anfügen des Tooltips alleine reicht noch nicht aus, dass dieser auch angezeigt wird. - Wie und wo muss man selbst bestimmen.

Ich lass mal den ein oder anderen Tipp da:

Node#setOnMouseEntered(...);
Node#setOnMouseExited(...);

sowie:

Tooltip#show(...);
Tooltip#hide();
Kommentar von gut4fr5g4 ,

Danke, wie immer hilfreich! :D

Schönen Abend noch! :)

Kommentar von gut4fr5g4 ,

x.setOnMouseEntered(new EventHandler(){
public void handle(Event e) {
tooltip.show(x, KOORDINATEN, KOORDINATEN
    );
        }
    });
x.setOnMouseExited(new EventHandler(){
    public void handle(Event e) {
        tooltip.hide();
    }
});

Kommentar von KnusperPudding ,

Jep, genau.

Kommentar von gut4fr5g4 ,

http://hastebin.com/osujojazaq.scala

Wieso habe ich hier Warnungen? :c (Vor den TableView-Elementen), irgendwas mit <>, was ich nicht verstehe (weiß dass das Generics sind, kann diese aber noch nicht :C

Kommentar von KnusperPudding ,

Die einzige Warnung, die ich hier ohne Xlint bekomme, ist, dass kein 

@Override

vor der Start-Methode ist:

Implementiert man Methoden aus einer anderen Klasse oder einem Interface, so sollte dies durch @Override kenntlich gemacht werden.

Generics sind eine Super-Sache, und wenn richtig implementiert, für jeden der auf Generics Methoden zurück greift, einfach nur angenehm.

Da du selbst keine Generic Methoden schreiben musst, hast du nicht die Schwierigkeit des Umsetzens, viel mehr nur die Vorteile daraus.

Am Beispiel Tableview<S> von JavaFX:

Sagen wir mal, du hast ein Bean-Objekt: Also eine Klasse mit Eigenschaften, die hier eine Zeile in deinem Tableview repräsentieren kann:

class MyListElement {

  private IntegerProperty id;
  private StringProperty text;

  public MyListElement(int id, String text) {
     this.id = new SimpleIntegerProperty(id);
     this.text = new SimpleStringProperty(text);
  }

  public int getID() {
     return id.get();
  }

  public void setID(int id) {
     this.id.setValue(id);
  }
  public IntegerProperty idProperty() {
   return this.id;
  }
  ....
}

Dann kannst du dem Tableview mitteilen, was für Elemente der Tableview haben wird:

TableView<MyListElement> tableView = new TableView<>();

Sobald dies geschehen ist kannst du beispielsweise, wenn du dir Elemente aus der Liste holen willst, direkt Typen dieser Zeile holen, ohne einen Cast ausführen zu müssen:

MyListElement erstesElement = tableView.getItems().get(0);

Dasselbe gilt auch für das anfügen. - Es ist in Sofern hilfreich, da es verhindert, hier Fremde Elemente aus Versehen anzufügen.

Dasselbe wiederum gilt natürlich auch für die TableColumn.

TableColumn<S,T>

Wiederum erwartet zwei Generics Typen: Der erste Typ ist für den Zeilentyp, bzw. der Typ, der dem Tableview bereits mitgeteilt wurde und der zweite Typ steht für den Datentypen, welchen die Spalte entgegen nimmt. 

Bei meinem Beispiel wäre das:

TableColumn<MyListElement, Integer> colID = new TableColumn<>();
TableColumn<MyListElement, String> colText = new TableColumn<>();

Hier ist es besonders wichtig, die Generics-Typen anzugeben, vorallem wenn man die Werte vielleicht auch etwas anders darstellen möchte. Thema: CellFactory, CellValeuFactory.

Kommentar von gut4fr5g4 ,

Danke! :D

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten