JavaFX Return Value nach Beendigung einer Animation

Ernesto95

Aktives Mitglied
Moin !

Ich habe aktuell ein Brett vorm Kopf und komme einfach nicht auf eine einfache Lösung.

Java FX Anwendung mit strikter Trennung zwischen der (programmatisch erstellten) View und dem Controller.

Folgendes sei gegeben:

Die View bietet einen Button an der irgendwas machen soll, zum Beispiel einen Thread starten

Java:
        btn.setOnAction(e -> {
            controller.btnActionStartThread();
        });

Der Controller möchte eine Bestätigung das er das wirklich machen soll und fordert die View auf einen Bestätigungsdialog anzuzeigen.

Code:
boolean exit = view.showConfirmationDialogue();
// if true starte Thread

Dieser Dialog soll per Fade in und Fade out animiert werden. FadeOut wird gestartet wenn der Button des Dialogs gedrückt wird, der finale Rückgabewert wird unmittelbar nach Start der Transition an den Controller zurückgegeben. Der Controller aber soll den Thread erst starten wenn die Animation beendet ist.

Im Prinzip bietet sich die setOnFinished Methode der Transition an um auf die Beendigung der Animation zu warten, aber in dieser kann ich keinen Rückgabewert für die showConfirmationDialogue() Methode ausgeben, da dies in einem Missing Return Statement Fehler resultiert.

Code:
public boolean showConfirmationDialogue(){
    boolean result;
    //erstelle Dialog und nach dem klicken die FadeOut Transition
    transition.setOnFinished(e->{
            return result; //
        });
    //missing return statement
}

2 funktionierende Lösungen habe ich anzubieten, glaube aber das diese beide nicht ideal sind.

1. Die showConfirmationDialogue Methode schlafen schicken, wobei w die Länge der Transition wäre.

Code:
public boolean showConfirmationDialogue(){
    boolean result;
    //erstelle Dialog und nach dem klicken die FadeOut Transition
    Thread.sleep(w);
    return result();
}

2. Die showConfirmationDialogue() gibt keine boolean zurück, sondern ruft in der setOnFinished Methode der Transition eine neue Methode im Controller auf.

Code:
t.setOnFinished(e-> {
    controller.btnActionStartThreadConfirmation(result)
})

Das würde allerdings den Umfang der Controller Klasse künstlich aufblähen (2 public Methoden statt 1). Nehmen wir einmal an es gäbe (aus welchen Gründen auch immer) 50 verschiedene Aktionen in dieser View die eine Bestätigung (oder Parametereingabe) über einen Dialog benötigen, dann wären das 50 zusätzliche Methoden.

Ich hoffe ihr konntet meinen Gedankengängen ohne vollständigen Code folgen und mein Problem erkennen. Falls nicht würde ich nochmal kompletten Code posten.

Dank euch !

Grüße
 
Y

yfons123

Gast
wenn on finished ausgelöst wird setzt du eine bool property auf true, auf der ist ein listener der falls newvalue true ist den bool auf false setzt und dann die Methoden ausführt

ist keine hexen Kunst.. du uberdenkst die ganze sache einfach
 

Ernesto95

Aktives Mitglied
Hallo yfons 123,

vielen Dank für deine Rückmeldung. Ich verstehe aber nicht wirklich was du meinst.

Ich habe mal versucht mein Problem auf ein Minimum an lauffähigem Code zu reduzieren. Der am Ende gepostete Code funktioniert so, mich stört aber das bei meiner Lösung im ViewController 2 public Methoden benötigt werden.

Nochmal zur Anforderung, die View-Technology soll vollkommen variabel sein. Daher auch die Abstraktion via Interface. Also egal ob JavaFX mit oder ohne Animation, AWT oder Swing (dann natürlich mit angepasster Main Klasse und ohne Übergabe der stage Instanz im MainController). Sprich der Main Controller sollte keinerlei Abhängigkeiten zu den JavaFX Packages haben, da ggf. JavaFX auf der Zielplattform gar nicht installiert ist. Wie gesagt, das durchreichen der stage Instanz bitte nicht beachten, das dient nur der Vereinfachung des Codebeispiels.

Demnach nochmal die Frage auf den Punkt gebracht: Gibt es irgendeine Möglichkeit das die showConfirmationDialogue() Methode in der View einen boolschen Rückgabewert bekommt, der erst zurückgegeben wird wenn die FadeOut Transition des btnDialogue abgeschlossen ist? So das ich die btnActionClicked() und btnActionClickedConfirmation(boolean confirm) Methoden im ViewController zusammenfassen kann in der Form

boolean confirm = view.showConfirmationDialogue();
if (confirmed) view.showMessage();

Oder hat jemand eine ganz andere Idee oder Vorschlag zur Umsetzung das das alles vereinfacht ? Bin für jeden Tip / Rat dankbar :)

Vielen Dank !

Java:
package com.example.demo;

import javafx.application.Application;
import javafx.stage.Stage;
import java.io.IOException;

public class Main extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        ViewController vc = new ViewController(stage);
    }

    public static void main(String[] args) {
        launch();
    }
}

Code:
package com.example.demo;

public interface View {
    public void show();
    public void showConfirmationDialogue();
    public void showMessage();
}

Code:
package com.example.demo;

import javafx.stage.Stage;

public class ViewController {

    private View view;

    public ViewController (Stage stage){
        view = new AnimatedView(stage, this);
        view.show();
    }

    public void btnActionClicked(){
        view.showConfirmationDialogue();
    }

    public void btnActionClickedConfirmation(boolean confirmed){
        if (confirmed) view.showMessage();
    }
}

Code:
package com.example.demo;

import javafx.animation.FadeTransition;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class AnimatedView implements View{

    private Stage stage;
    private ViewController viewController;
    private Button btnAction, btnDialogue;
    private Label lblMessage;

    public AnimatedView(Stage stage, ViewController viewController){
        this.stage = stage;
        this.viewController = viewController;
        createView();
        addEvents();
    }

    private void createView(){
        Pane pane = new Pane();
        VBox box = new VBox();
        btnAction = new Button("Action");
        //Clicking this Button simulates a Dialog Confirmation
        btnDialogue = new Button("DialogueConfirmation");
        btnDialogue.setOpacity(0);
        lblMessage = new Label("If you read this message all animations should have been finished !");
        lblMessage.setVisible(false);
        box.getChildren().addAll(btnAction, btnDialogue, lblMessage);
        pane.getChildren().add(box);
        Scene scene = new Scene(pane);
        stage.setScene(scene);
    }

    private void addEvents(){
        btnAction.setOnMouseClicked(e->{
            viewController.btnActionClicked();
        });
    }

    @Override
    public void show() {
        stage.show();
    }

    @Override
    public void showConfirmationDialogue() {
        FadeTransition fadeIn = getFadeInTransition();
        fadeIn.setNode(btnDialogue);
        fadeIn.setOnFinished(in->{
            btnDialogue.setOnMouseClicked(e->{
                btnDialogue.setDisable(true);
                FadeTransition fadeOut = getFadeOutTransition();
                fadeOut.setNode(btnDialogue);
                fadeOut.setOnFinished(out->{
                    viewController.btnActionClickedConfirmation(true);
                });
                fadeOut.play();
            });
        });
        fadeIn.play();
    }

    @Override
    public void showMessage() {
        lblMessage.setVisible(true);
    }

    private FadeTransition getFadeInTransition(){
        FadeTransition transition = new FadeTransition();
        transition.setDuration(Duration.millis(3000));
        transition.setFromValue(0);
        transition.setToValue(1);
        return transition;
    }

    private FadeTransition getFadeOutTransition(){
        FadeTransition transition = new FadeTransition();
        transition.setDuration(Duration.millis(3000));
        transition.setFromValue(1);
        transition.setToValue(0);
        return transition;
    }
}
 
Y

yfons123

Gast
Sprich der Main Controller sollte keinerlei Abhängigkeiten zu den JavaFX Packages haben, da ggf. JavaFX auf der Zielplattform gar nicht installiert ist.
ehmm
1. javafx funktioniert ohne bindings zwischen ablauf steuerer und ansicht nicht, da ergibt das ganze framework keinen sinn mehr
2. dir kann es arsch wie hose sein ob der ziel pc javafx installiert hat oder nicht, weil du einfach javafx in deinem programm mitlieferst genauso wie die jvm ....ansonsten ergibt java auch keinen sinn wenn man das nicht könnte

oder hast du dir java installiert bevor du minecraft starten konntest ? :D
 

Ernesto95

Aktives Mitglied
Hab zwar nie Minecraft gespielt but i get your point :p

Hab mal versucht das ganze mit einer BooleanProperty umzusetzen. Der untenstehende Code funktioniert so. Ist es in etwa das was du meinst ?

Was mich an diesem Konstrukt stört ist das der ViewController jetzt den Code für die Prüfung des Animationsstatus enthält. Wenn ich jetzt neben der AnimatedView aber für ältere Rechner eine SimpleView implementiere die ohne Animation arbeitet, aber trotzdem mit dem gleichen ViewController kommuniziert, dann schleppe ich den ganzen Animationsbalast (sprich die Properties) mit den ich bei der SimpleView ja gar nicht benötige.

Oder versuche ich hier zu krass View und Controller zu trennen und die Ablaufsteuerung gehört in die View und nicht in den Controller ?

Anbei der neue Code. Der Code der Main Klasse hat sich nicht geändert, daher poste ich ihn nicht neu.

Java:
package com.example.demo;

import javafx.beans.property.BooleanProperty;

public interface View {
    public void show();
    public boolean showConfirmationDialogue();
    public void showMessage();
    public BooleanProperty isAnimationRunning();
}

Code:
package com.example.demo;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.stage.Stage;

public class ViewController {

    private View view;
    private ChangeListener<Boolean> listener;

    public ViewController (Stage stage){
        view = new AnimatedView(stage, this);
        view.show();
    }

    public void btnActionClicked(){
        boolean confirmed = view.showConfirmationDialogue();
        listener = new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                if (!newValue) {
                    if (confirmed) view.showMessage();
                }
                view.isAnimationRunning().removeListener(listener);
            }
        };
        view.isAnimationRunning().addListener(listener);
    }

}

Code:
package com.example.demo;

import javafx.animation.FadeTransition;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class AnimatedView implements View{

    private Stage stage;
    private ViewController viewController;
    private Button btnAction, btnDialogue;
    private Label lblMessage;
    private BooleanProperty animationRunning;

    public AnimatedView(Stage stage, ViewController viewController){
        this.stage = stage;
        this.viewController = viewController;
        animationRunning = new SimpleBooleanProperty(false);
        createView();
        addEvents();
    }

    private void createView(){
        Pane pane = new Pane();
        VBox box = new VBox();
        btnAction = new Button("Action");
        //Clicking this Button simulates a Dialog Confirmation
        btnDialogue = new Button("DialogueConfirmation");
        btnDialogue.setOpacity(0);
        lblMessage = new Label("If you read this message all animations should have been finished !");
        lblMessage.setVisible(false);
        box.getChildren().addAll(btnAction, btnDialogue, lblMessage);
        pane.getChildren().add(box);
        Scene scene = new Scene(pane);
        stage.setScene(scene);
    }

    private void addEvents(){
        btnAction.setOnMouseClicked(e->{
            viewController.btnActionClicked();
        });
    }

    @Override
    public void show() {
        stage.show();
    }

    @Override
    public boolean showConfirmationDialogue() {
        animationRunning.set(true);
        FadeTransition fadeIn = getFadeInTransition();
        fadeIn.setNode(btnDialogue);
        fadeIn.setOnFinished(in->{
            btnDialogue.setOnMouseClicked(e->{
                btnDialogue.setDisable(true);
                FadeTransition fadeOut = getFadeOutTransition();
                fadeOut.setNode(btnDialogue);
                fadeOut.setOnFinished(out->{
                    animationRunning.set(false);
                });
                fadeOut.play();
            });
        });
        fadeIn.play();
        return true;
    }

    @Override
    public void showMessage() {
        lblMessage.setVisible(true);
    }

    @Override
    public BooleanProperty isAnimationRunning() {
        return animationRunning;
    }

    private FadeTransition getFadeInTransition(){
        FadeTransition transition = new FadeTransition();
        transition.setDuration(Duration.millis(3000));
        transition.setFromValue(0);
        transition.setToValue(1);
        return transition;
    }

    private FadeTransition getFadeOutTransition(){
        FadeTransition transition = new FadeTransition();
        transition.setDuration(Duration.millis(3000));
        transition.setFromValue(1);
        transition.setToValue(0);
        return transition;
    }
}

Danke ! :)
 
Y

yfons123

Gast
ich weis nicht wie weit ich ausholen sollte da das letzte mal wo ich es getan hab nie was zurück gekommen ist

1. in deinem interface hat deine bool property nix verloren
2. dass man einen eventhandler an das on finished geben kann wusst ich nicht das macht das einfacher

ansich wäre eine sauberere teilung folgender maßen
Java:
class xview{
    Animation animation;
    Panezeug pane;
    XController controller
       
    public xview(){
        animation.onFinished(controller::doStuff);
    }
}
class xcontroller{
    public doStuff("das event ?" event){
        System.out.println("getriggeered");
    }
}
ich weis nicht welches event gebraucht wird für den eventhandler bzw listener msust du selber schauen

dann brauchst du die property gar nicht
mach nicht das view interface da es dir nix bringt du wirst niemals wieder eine view bauen die exakt diese konsteallation hat
1. show() ? soll jede view eine eigene stage haben? nein... eine view ist irgendwas was von pane erbt bzw groupe aber pane ist eifnacher die in eine stage eingesetzt werden kann
2. hat jede view einen bestätigungs dialog? nein ..
usw
 

Ernesto95

Aktives Mitglied
1. in deinem interface hat deine bool property nix verloren

Wie soll ich sonst auf die BooleanProperty zurückgreifen wenn ich keinen getter über das Interface anbiete ?

Java:
class xview{
    Animation animation;
    Panezeug pane;
    XController controller
      
    public xview(){
        animation.onFinished(controller::doStuff);
    }
}
class xcontroller{
    public doStuff("das event ?" event){
        System.out.println("getriggeered");
    }
}

Das geht ja schon so ziemlich in die Richtung meines ersten Entwurfs, wo die View den Status der Animation im Auge behält und sich beim Controller meldet wenn die Animation beendet ist.

mach nicht das view interface da es dir nix bringt du wirst niemals wieder eine view bauen die exakt diese konsteallation hat

Die View soll ja austauschbar sein, und genau dafür soll der Controller nur über eine Schnittstelle mit dieser kommunizieren. Genau dafür sind doch Schnittstellen da ?!

1. show() ? soll jede view eine eigene stage haben? nein... eine view ist irgendwas was von pane erbt bzw groupe aber pane ist eifnacher die in eine stage eingesetzt werden kann

Ja, macht in diesem MIni Beispiel keinen Sinn, da hast du recht. Das ist ein Überbleibsel aus dem größeren Projekt aus dem ich dieses Problem extrahiert hatte.
 
Y

yfons123

Gast
ich mach ein Nickerchen, fahr dann einkaufen und dann kann ich mal was zusammen tippen falls du es noch brauchst.. war grade in der Vorlesung und hatte keine IDE
 
Y

yfons123

Gast
also meiner meinung nach klappt bei dir der ansatz nicht da du sachen vermischt

1.
wenn du ne klasse hast mit 2 methoden und ein interface erstellst das auch die zwei methoden hat aber du weist da wird niemals eine andere klasse das interface bneutzen dann ist das für den arsch

2.
die "austauschbarkeit der view" bezieht sich nicht auf die laufzeit sondern du baust deine anwendung so auf
model => controller => view
bzw in den päckchen baust du sie immer in dieser reihenfolge auf dh du schreibst zuerst die background logik und dann den controller
dann die view

dadurch dass du die view als letztes baust bricht der code nicht wenn du da zeilen löscht also ist sie austauschbar

wenn du dein framework bauen willst um deine "fehler zu beheben" die du in dem großen projekt hattest solltest du dir erstmal gedanken machen wie du das ganze aufbaust
was kann wer...
model ist ziemlich einfach bei interfaces : jedes model ist untershciedlich und hat keine gemeinsamkeit ( zumindest für mich )
controller : beinhaltet alle eventhandler + alle methoden müssen ohne view funktionieren
view : hat controller, hat nodes

alsooo dann ich fang damit an dass ich eine standard klasse zum resourcen laden einbaue weils mir auf die nerven geht :)
Java:
public interface FrameworkCorePart {
    default String getResource(String resourceName) {
        return getResourceURL(resourceName).toString();
    }
     /**
       * searches a resource in the Same path as the Calling Class is in, if the class
       * is not "open PACKAGENAME" then this will result in a
       * {@link NullPointerException}.
       *
       * @param resourceName the resource name
       * @return the resource
       */
      default URL getResourceURL(String resourceName) {
        URL url = getClass().getResource(resourceName);
        if (url == null) {
          throw new RuntimeException("\nThe Resource was not found."
              + "\nThis can be caused by not having \"opens PACKAGENAME\" in the module info"
              + " so it's not accessible" +
              "ressource :" + resourceName+ " url "+url);
        }
        return url;
      }

      /**
       * searches a resource in the Same path as the Calling Class is in, if the class
       * is not "open PACKAGENAME" then this will result in a
       * {@link NullPointerException}.
       *
       * @param resourceName the resource name
       * @return the File
       */
      default File getFile(String resourceName) {
        try {
          return new File(getResourceURL(resourceName).toURI());
        } catch (URISyntaxException e) {
          throw new RuntimeException(e.getMessage());
        }
      }
}
eig sollte man ja default nicht hernehmen als standard implementierung da man das diamant problem bekommt aber das ist mir jetzt wurscht

als nächstes mach ich das view interface
Code:
public interface View<T extends Pane,K extends Controller> extends FrameworkCorePart {
    K getController();
    T getRoot();
}
eine view braucht einen controller und einen root node der von pane extended, der soll nicht von Node extenden da eine view mehrere nodes meines erachtens sind

dann der controller wo ich gerade einfach nix drin hab aber eig sollte da die verbindung zur eigenen view rein aber das kannst du dann selber versuchen, bzw wenn du es sauber willst löst du es über property bindings in der view und nicht über eine extra verbindung
Code:
public interface Controller extends FrameworkCorePart{

}


jetzt mach ich mal eine standard implementierung für alle views
Code:
public abstract class SimpleView<T extends Pane, K extends Controller> implements View<T, K> {
    protected K controller;
    protected T root;

    public K getController() {
        return controller;
    }
public T getRoot(){
return root;
}

    public String toString() {
        return "SimpleView [root=" + root + "], [getClass()=" + getClass() + "]";
    }

    protected final void cssStyleRoot() {
        root.getStylesheets().add(findCssStyleSheet());
    }

    /**
     * Find css style sheet.
     *
     * @return the string
     */
    protected String findCssStyleSheet() {
        return getResource(getClass().getSimpleName() + ".css");
    }
}
wenn du jetzt mvvm was du eig hast anwenden willst mit deinen "schnittstellen" könnte es folgender maßen ausschauen
da wir ab jetzt ja von hinten herein programmieren fange ich mit dem controller an ( weil du jetzt kein model hast )
ala
Java:
public class AnimationController implements Controller{
    public void finishMove(Event event) {
        System.out.println(event);
    }
}
mir ist komplett scheiß egal wer diesen eventhandler hat oder was damit gemacht wird der controller sollte nur shcauen dass wenn es passiert das richtige im model und controller funktioniert

jetzt ist controller fertig und model komplett ignoriert jetzt gehts an die view
Java:
public class AnimationView extends SimpleView<VBox, AnimationController>{

    Animation animation;
    public AnimationView() {
        root = new VBox();
        controller = new AnimationController();
        setupProperties();
    }
    private void setupProperties() {
        animation.onFinishedProperty().set(controller::finishMove);
    }

}
hier setz ich das root element auf eine VBox und wenn du jetzt von außen getRoot machst lieferts dir auch eine VBox zurück darum musst du dich nicht mehr kümmern
genau das gleiche für den controller

dass ich das setupproperties raus gezogen habe ist schon aus priznip da wahrshceinlich noch mehr eventhandler gesetzt werden müssen und properties
absofort kann die animation on finished den eventhandler vom controller

so und jetzt löscht du einfahc als spaß an der freude die animation und machst stattdessen einen button hin der on action das event kann, das ist dem controller wurscht ( ansonsten musst du das event genauer spezifizieren ) somit hab ich die möglichkeit die animation auszutauschen für nen button oder einen keks oder sonst was und dann hast du den gewünschten effekt

ich hab ein altes framework mal gebaut aber das geht andersherum an die sache ran was zwar manchmal vorteile hat aber der ansatz den ich hier versucht hab zu erklären wird der ansatz von meiner version 2
 

mihe7

Top Contributor
Gibt es irgendeine Möglichkeit das die showConfirmationDialogue() Methode in der View einen boolschen Rückgabewert bekommt, der erst zurückgegeben wird wenn die FadeOut Transition des btnDialogue abgeschlossen ist?
Wenn Du showConfirmationDialogue() nicht im UI-Thread aufrufst, kann der Thread natürlich darauf warten.

Oder versuche ich hier zu krass View und Controller zu trennen und die Ablaufsteuerung gehört in die View und nicht in den Controller ?
Für meinen Geschmack ist diese Trennung tatsächlich overkill. Unabhängig davon sind es nun einmal zwei verschiedene Ereignisse.

Nehmen wir einmal an es gäbe (aus welchen Gründen auch immer) 50 verschiedene Aktionen in dieser View die eine Bestätigung (oder Parametereingabe) über einen Dialog benötigen, dann wären das 50 zusätzliche Methoden.
Das muss nicht sein. Du kannst der Methode z. B. ein Runnable mitgeben, das ausgeführt wird, wenn der Benutzer bestätigt.
 

Ernesto95

Aktives Mitglied
Moin yfons123,

vielen Dank für den ausführliche Code. Ich muss gestehen ich verstehe auf den ersten Blick max. 50% davon, aber werde das die nächsten Tage bzw. am Wochenende mal ausführlich betrachten und testen !

wenn du ne klasse hast mit 2 methoden und ein interface erstellst das auch die zwei methoden hat aber du weist da wird niemals eine andere klasse das interface bneutzen dann ist das für den arsch

Ja, das ist mir bewusst, aber das soll ja das Ziel sein mehrere unterschiedliche Views implemetieren zu können. Einfach nur ein paar andere Farben würde in FX über CSS laufen, aber komplett anderes Layout dann eben über Schnittstellen.

Ich hab das ganze nicht irgendwo gelernt, sondern hab mir alles komplett selber beigebracht über Bücher, Youtube, Udemy, Dr. Google und viel java-forum. Daher vielleicht auch meine Herangehensweise beim programmieren das ich visuelles Feedback brauche.

Bei meinem aktuell gerade fertiggestellten Minesweeper Klon z.b. habe ich als erstes eine absolut rudimentäre View gebastelt. Daraus dann das Interface abgeleitet. Dann Controller, Model und und die gesamte Spiellogik implemetiert. Dabei das korrekte Verhalten an der "TestView" überprüft. Und als das Spiel dann zu 100% funktioniert hat habe ich ich mich um die finale View gekümmert die ich dank den Interfaces komplett vom restlichen Code abgekapselt entwerfen konnte.

Grüße
 
Y

yfons123

Gast
warum packst du alles in eine view?

schau dir mal meine view an ... von der kannst du das tun was du tun möchtest also mehrere views draus bauen ohne jedes mal den gleich schmarn zu tippen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
J JOptionPane return bei "Abbrechen" AWT, Swing, JavaFX & SWT 13
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
S Übernehmen von Inhalten aus Zellen in JTables ohne Return AWT, Swing, JavaFX & SWT 7
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
S Methoden return wert? AWT, Swing, JavaFX & SWT 7
W Auf Eingabe von Return reagieren AWT, Swing, JavaFX & SWT 4
R JTextFields mit Return statt Tab anwählen AWT, Swing, JavaFX & SWT 4
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
P JavaFX Key-Value-Paar auf TreeItem ermitteln AWT, Swing, JavaFX & SWT 6
N JavaFX TreeItem: Value-Binding AWT, Swing, JavaFX & SWT 1
J CheckTreeView mit eigenem Cell Value AWT, Swing, JavaFX & SWT 3
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
U Swing Jtable cells value editable AWT, Swing, JavaFX & SWT 1
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
A Swing Slider-Value auslesen und weitergeben AWT, Swing, JavaFX & SWT 4
T jSlider-Value als Float in jLabel ausgeben AWT, Swing, JavaFX & SWT 2
O Swing JSlider mit doppelter Value AWT, Swing, JavaFX & SWT 6
C Value eines RadioButtons ausgeben AWT, Swing, JavaFX & SWT 6
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
Semox Swing Slider mit Value Auswertung wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
J Swing JXTable, vom CellRenderer gerendertes Value holen. AWT, Swing, JavaFX & SWT 5
G Value vom TreeCellEditor ist immer null AWT, Swing, JavaFX & SWT 3
O ScrollBar.setValue(int value); ? AWT, Swing, JavaFX & SWT 3
L Jcombobox + value Wert AWT, Swing, JavaFX & SWT 7
L JTable SelectRowByValue(Object Value)? AWT, Swing, JavaFX & SWT 3
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
VPChief Nach abspielen von Sound reagiert das Program nichtmehr AWT, Swing, JavaFX & SWT 9
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
S JavaFX Slider freezt nach Benutzung AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
F JavaFX Zustand der CheckMenuItems behalten nach Programmneustart AWT, Swing, JavaFX & SWT 7
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
MiMa Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing Seltsame Ausgabe nach ButtonClick AWT, Swing, JavaFX & SWT 1
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
L Graphik nach 100 ms neu laden AWT, Swing, JavaFX & SWT 1
B Doppelte MenuBar -> Nach Minimieren verschwunden AWT, Swing, JavaFX & SWT 3
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20

Ähnliche Java Themen

Neue Themen


Oben