fxml onAction event

Fiedelbambu

Mitglied
Ich versuche ein Widget Gui zu schreiben im IntelliJ, wenn ich auf einen Button clicke soll dieser dann eine bestimmte Webseite auf machen. In Eclipse schien es mir ziehmlich einfach jedoch habe ich dort css benutzt, nun versuche ich das ganze in IntelliJ mit fxml zu verwircklichen. Ein neus Umfeld für mich und ich kann nicht den selben code benutzten.
In Eclipse sah das ganze so aus wie in diesem Code:

button4.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
getHostServices().showDocument("https://www.amazon.com/");

}
});

Ich konnte schon übers Internet heraus finden das ich bei fxml das ganze mit onAction=" " anfangen kann. Nur wie bekomme ich es hin das der Code dann auch den weblink öffnet?


<Button fx:id="Button6" ellipsisString="" mnemonicParsing="false" prefHeight="66.0" prefWidth="77.0" onAction="exit">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
<graphic>
<ImageView fitHeight="57.0" fitWidth="56.0">
<image>
<Image url="@exit.png" />
</image>


Das ist der Code in fxml. Ich habe noch eine Controller Datei und es dort mit Actionevent versucht nur komme ich nicht auf die Lösung. Bei youtube sind keine passende Videos zu finden und hier habe ich zu dem Thema auch nichts gefunden. Vielleicht mag ja auch jemand mir ein oder zwei Buch Empfelungen geben die mir beim Lernen weiter helfen, damit ich nicht so viel Fragen muss.....
 
Du must in der fxml die function mit einem "#" ergänzen

XML:
<Button fx:id="Button6" ellipsisString="" mnemonicParsing="false" prefHeight="66.0" prefWidth="77.0" onAction="#exit">

Die Funktion wird dann in den Controller deklariert:

Java:
@FXML
private void handle(ActionEvent event) {
    getHostServices().showDocument("https://www.amazon.com/");
}

Ich würde aber die Funktion nicht "exit" benennen. Besser wäre es mit "handleButtonOpenLink". Dann natürlich den "Button4" in "ButtonOpenLink" umbenennen. das macht den Code leichter lesbar. Am besten die fxml mit SceneBuilder bearbeiten. dann muß man sich nicht um "#" kümmern.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Also ich würde Methoden immer danach benennen, was sie machen. Wer die Methode aufruft ist dabei egal. Das muss ja kein Button sein. Das kann ggf auch ein anderes Control sein. Ggf gibt es auch mehrere Controls, die sowas aufrufen - wie würdest du es dann benennen?

Die Idee ist dabei halt, das, was etwas macht, von der UI zu trennen. Da gibt es mehrere Pattern - MVC und MVVM sind am verbreitetstem. Das kann man sich ja vielleicht mal etwas ansehen und vertiefen…
 
Also ich habe immer dir Trennung zur Businesslogik im Controller gemacht. Deshalb finde ich es wichtig von wo der Request kommt. Das ist aber eine persönliche Design-Entscheidung.
Viele Wege führen nach Rom. Manche Enden in Ostdeutschland...
 

KonradN

Super-Moderator
Mitarbeiter
Generell soll es jeder so machen, wie er es machen möchte. Ich möchte auch nicht sagen, dass etwas falsch ist. Mich da also bitte nicht missverstehen. Ich gebe nur meine Sichtweise wieder - ich habe mich da mal vor einiger Zeit an eine Blog Serie gewagt (Mit dem Resultat, dass Java auf dem Desktop ein totes Pferd für mich ist :) )

Also ich habe immer dir Trennung zur Businesslogik im Controller gemacht. Deshalb finde ich es wichtig von wo der Request kommt.
Meine Gedanken sind da: Ist im Controller wichtig, woher der Request kommt? Da ist doch mehr die Beauftragung wichtig: Der Anwender will xyz. Wie er das beauftragt, sollte dem Controller egal sein. Er bietet nur eben xyz an. Ob das nun durch einen Button, einen Link, eine ComboBox oder sonst irgendwas ausgelöst wird, ist doch eigentlich egal.

Die Kernidee ist ja, dass man im Controller Aktionen anbietet und die werden dann von der View - egal wie - benutzt. Bei dem MVC Pattern ist es sogar so angedacht, dass die View da nur ein Observer Pattern anbietet. Dass da die View den Controller kennt ist da also in keiner Weise angedacht. Aber klar: Nur weil da im FXML ein Controller angegeben wird, muss das ja nicht MVC sein. Aber ich sehe da nichts sinnvolles - ich sehe da nur, dass da die Entwickler dazu verleitet werden, da in diesen Controller auch alle oder viele Details rein zu packen. Das finde ich nicht gut.

Aber ich verstehe die Notwendigkeit, die da teilweise vorhanden ist. Daher war für mich dann der einzige Weg zur sauberen Trennung das MVVM wobei die View aus dem FXML und der eingetragenen Controller Klasse bestand (Das war auch nicht zu umgehen. Alleine schon bidirektionale Bindings gehen ohne Code nicht. Kann man zwar prinzipiell per JavaScript im FXML plazieren, aber dann mag der SceneBuilder die Datei nicht mehr und so ... )

Am Ende habe ich für mich Java auf dem Desktop auch nur noch zum toten Pferd erklärt. Das ist an sich einfach zu unvollständig und ich was da aus .Net / WPF Sicht mehr gewohnt.
 
Generell soll es jeder so machen, wie er es machen möchte. Ich möchte auch nicht sagen, dass etwas falsch ist. Mich da also bitte nicht missverstehen. Ich gebe nur meine Sichtweise wieder - ich habe mich da mal vor einiger Zeit an eine Blog Serie gewagt (Mit dem Resultat, dass Java auf dem Desktop ein totes Pferd für mich ist :) )
Konrad mach Dir keine Gedanken. Genau so sehe ich es auch
 

Fiedelbambu

Mitglied
Also ich würde Methoden immer danach benennen, was sie machen. Wer die Methode aufruft ist dabei egal. Das muss ja kein Button sein. Das kann ggf auch ein anderes Control sein. Ggf gibt es auch mehrere Controls, die sowas aufrufen - wie würdest du es dann benennen?

Die Idee ist dabei halt, das, was etwas macht, von der UI zu trennen. Da gibt es mehrere Pattern - MVC und MVVM sind am verbreitetstem. Das kann man sich ja vielleicht mal etwas ansehen und vertiefen…
Oh ich habe die Diskusion nicht weiter verfolgt, mein rechner ist jetzt in der Schule. Morgen zeige ich euch meine Lösung. ICh hoffe die gefällt euch. Die funktion klappt auf jeden Fall. Wenn ich auf den Button drücke schließt er die Anwendung jetzt, habe das aber nicht im Scene Builder gemacht, da der mir zu viel Code abnimmt und ich das ganze dann nicht nach voll ziehen kann. Meine Trainer sind alle nur Online und es ist schwer dort einen zu finden der Helfen kann. ICh gucke mir MVC und MVVM auf jeden fall an.


@FXML
void exit(MouseEvent event) {

}

public void handleExitButtonAction(ActionEvent event) {
Platform.exit();
}
}

Das ist der Code in der Controller Datei, die Buttton habe ihc mittlerweile passende Namen gegeben. Der Rest folgt
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
berserkerdq2 Warum tut man @FXML bei Javafxcontrollerklasssn Java Basics - Anfänger-Themen 2
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
T FXMl Event has not a Slot Java Basics - Anfänger-Themen 1
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
Tommy135 Event erstellen Java Basics - Anfänger-Themen 7
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Event schmeißen Java Basics - Anfänger-Themen 1
F In Eclipse Haltepunkt bei Event setzen? Java Basics - Anfänger-Themen 1
T Übungsaufgabe Event Handling Java Basics - Anfänger-Themen 0
M Action Event auf Textfield legen Java Basics - Anfänger-Themen 18
V Button/Event wird nicht ausgeführt, was tun? Java Basics - Anfänger-Themen 2
J Keyboard Event auch ohne Fokus mitbekommen Java Basics - Anfänger-Themen 2
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
A Key Event - Abfrage von 2 gedrückten Tasten Java Basics - Anfänger-Themen 6
E Event gesucht Java Basics - Anfänger-Themen 1
G Button Event Java Basics - Anfänger-Themen 6
Thallius Hidden Feature über Key Event starten Java Basics - Anfänger-Themen 4
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
D Button action Event einblenden/ausblenden Java Basics - Anfänger-Themen 6
U Threadsafe Event-Handling Java Basics - Anfänger-Themen 2
C Klassen NullPointerException beim Event Handling in GUI Java Basics - Anfänger-Themen 8
P ActionListener Action Event Java Basics - Anfänger-Themen 5
J Erste Schritte import awt.* ;awt.event.*; Java Basics - Anfänger-Themen 3
T event und while-schleife Java Basics - Anfänger-Themen 26
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
M Während event einen anderen event ausführen?? Java Basics - Anfänger-Themen 3
S Event aus anderer Klasse als Auslöser Java Basics - Anfänger-Themen 5
M Event erstellen Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
D Eigenes Event beim TimeOut Java Basics - Anfänger-Themen 2
D Auf Event warten Java Basics - Anfänger-Themen 4
I AWS Event Notification Service Sample ausführen... Java Basics - Anfänger-Themen 7
M JList Event Java Basics - Anfänger-Themen 5
Houly while Schleife im ActionPerformed Event Java Basics - Anfänger-Themen 8
R eigenen Event schreiben Java Basics - Anfänger-Themen 16
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
Q Eigenes Event feuern Java Basics - Anfänger-Themen 5
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
D Window resize Event ? Java Basics - Anfänger-Themen 5
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
GilbertGrape Eigenes Event? Java Basics - Anfänger-Themen 2
A Synchronisierung oder gibt es das onChange event? Java Basics - Anfänger-Themen 4
J Automatisch Button drücken/Event ausführen? Java Basics - Anfänger-Themen 6
G Button Action Event starten Java Basics - Anfänger-Themen 4
G Methode nicht im Event-Dispatcher-Thread starten? Java Basics - Anfänger-Themen 2
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
N Event auf JTabbedPane abfragen ? Java Basics - Anfänger-Themen 8
G Event Handler Java Basics - Anfänger-Themen 7
T button event Java Basics - Anfänger-Themen 3
P Raw-Key-Event Java Basics - Anfänger-Themen 4
Q ActionListener event bei JPanels Java Basics - Anfänger-Themen 5
J Event-Handling geht nicht Java Basics - Anfänger-Themen 6
G Button event problem Java Basics - Anfänger-Themen 24
B Eigenes Event schreiben Java Basics - Anfänger-Themen 7
D MouseLister und Identifikation des Event - Buttons Java Basics - Anfänger-Themen 4
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
T java.awt.event.WindowAdapter Java Basics - Anfänger-Themen 2
B Event-Actionlistener(Def) Java Basics - Anfänger-Themen 6
G GUI Event Handling Java Basics - Anfänger-Themen 5
M Event auslösen (unsinnig gestellt - ignorieren) Java Basics - Anfänger-Themen 4
M [SOLVED]Swing Event Management Java Basics - Anfänger-Themen 7
N Runtime.exec und Key event Java Basics - Anfänger-Themen 2
C Klasse muss auf Event in einer anderen Klasse reagieren Java Basics - Anfänger-Themen 7
G JTable - Event - MVC Java Basics - Anfänger-Themen 10
J Event-Hilfe Java Basics - Anfänger-Themen 4
T Event zu bestimmter Uhrzeit auslösen ? Java Basics - Anfänger-Themen 5
S MausKlickZähler - Event Problem Java Basics - Anfänger-Themen 2
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
C mouseDown (Event e, int x, int y) rechts oder linksklick ? Java Basics - Anfänger-Themen 10
D if (event.target instanceof TextField) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben