JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern

Hag2bard

Bekanntes Mitglied
Hallo,

ich bin momentan ein wenig mit JavaFX am rumspielen und wollte folgendes machen:

Ich habe eine Gui mit JavaFX aufgebaut. Dort habe ich 3 Buttons und 1 Label.
Screenshot.png
Ich möchte aus Testgründen, dass er die Farbe vom VBox Hintergrund beim Klick auf Einzahlen ändert.
Das funktioniert auch wunderbar.
Als nächsten Schritt möchte ich, dass er die Farben nach Klick auf Einzahlen im Sekundentakt(z.b.1s, sollte variabel sein) ändert.
Hierfür habe ich eine Methode, die er aufruft wenn ich auf den Button klicke, die changeBackground heißt.
In dieser Methode ändere ich den Hintergrund, warte mit Thread.sleep(1000); und rufe dann die Methode changeBackground erneut auf.
Das einzige was dann aber passiert ist nichts. (Er arbeitet und arbeitet) Ich habe mal probiert die Methode mehrmals zu kopieren und changeBackground2,3,4 usw genannt.
Mir ist aufgefallen, dass er die Hintergrundfarbe ändert, wartet, ändert, wartet, was er ja auch soll. Allerdings erst wenn das vorbei ist, zeigt mir meine kleine Gui die letzte Farbe an. Also sie aktualisiert sich erst am Ende der Vorgänge.

Wie kann ich das programmieren, dass er die Gui neu zeichnet, nachdem er die Hintergrundfarbe gewechselt hat?

Mein Code:


Main:
package sample;


public class Main {


    public static void main(String[] args) {
        Gui gui = new Gui();
        gui.launcher(args);

    }
}

Gui Klasse:
package sample;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class Gui extends Application {

    private int textSize = 30;
    private String kontoinhaber = "Peter Lustig";
    private VBox vbox;
    private int i = 0;
    // private ArrayList<Background> b2 = getBackgroundArrayList();
    private Background[] background = getBackgroundArray();

    @Override
    public void start(Stage stage) {
        try {

            VBox vbox = new VBox();
            //vbox.setBackground(FXBackground.BLACK);
            // vbox
            Scene mainMenu = new Scene(vbox);

            Label lblWelcome = new Label("Herzlich Willkommen\n" + kontoinhaber);
            lblWelcome.setFont(new Font("Arial", textSize));
//            lblWelcome.setBackground(new Background(new BackgroundFill(Color.rgb(250,250,250), CornerRadii.EMPTY, Insets.EMPTY)));
            lblWelcome.setBackground(FXBackground.PINK);
            Button btnEinzahlen = new Button("Einzahlen");
            Button btnAuszahlen = new Button("Auszahlen");
            Button btnSenden = new Button("Überweisen");
            btnEinzahlen.setPrefSize(400, 100);
            btnAuszahlen.setPrefSize(400, 100);
            btnSenden.setPrefSize(400, 100);
            btnEinzahlen.setFont(new Font("Arial", textSize));
            btnAuszahlen.setFont(new Font("Arial", textSize));
            btnSenden.setFont(new Font("Arial", textSize));
            // btnEinzahlen.setStyle("-fx-background-image: url(/test.bmp)");
            // btnAuszahlen.setStyle("-fx-background-image: url(/test.bmp)");
            btnEinzahlen.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent actionEvent) {
                    System.out.println("HALLO");
                    System.out.println(i);

                    changeBackground();
                }
            });

            vbox.setPrefSize(600, 650);
            vbox.setSpacing(50);   //Abstand zwischen den Nodes
            vbox.setAlignment(Pos.CENTER);
            vbox.getChildren().add(lblWelcome);
            vbox.getChildren().add(btnEinzahlen);
            vbox.getChildren().add(btnAuszahlen);
            vbox.getChildren().add(btnSenden);


            stage.setScene(mainMenu);
            stage.show();
            this.vbox = vbox;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Background[] getBackgroundArray() {
        Background[] backgrounds = new Background[12];
        backgrounds[0] = FXBackground.WHITE;
        backgrounds[1] = FXBackground.LIGHT_GRAY;
        backgrounds[2] = FXBackground.GRAY;
        backgrounds[3] = FXBackground.BLACK;
        backgrounds[4] = FXBackground.RED;
        backgrounds[5] = FXBackground.PINK;
        backgrounds[6] = FXBackground.ORANGE;
        backgrounds[7] = FXBackground.YELLOW;
        backgrounds[8] = FXBackground.GREEN;
        backgrounds[9] = FXBackground.MAGENTA;
        backgrounds[10] = FXBackground.CYAN;
        backgrounds[11] = FXBackground.BLUE;
        return backgrounds;
    }

//    public ArrayList<Background> getBackgroundArrayList() {
//        ArrayList<Background> backgrounds = new ArrayList<Background>();
//        int maxx = 15;
//        for (int r = 0; r < maxx; r++) {
//            for (int g = 0; g < maxx; g++) {
//                for (int b = 0; b < maxx; b++) {
//                    backgrounds.add(FXBackground.getBackground(r, g, b));
//                }
//            }
//        }
//        return backgrounds;
//    }


    public void changeBackground() {
        this.vbox.setBackground(this.background[i]);
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        i++;
        if (i == 12) i = 0;
        changeBackground();
    }


    public void launcher(String[] args) {

        launch(args);
    }


}

FXBackground Klasse:
package sample;

import javafx.geometry.Insets;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.paint.Color;

public class FXBackground {
    private static Background background;

            static Background getBackground(int r, int g, int b){
                background = new Background(new BackgroundFill(Color.rgb(r,g,b), CornerRadii.EMPTY, Insets.EMPTY));
                //
                System.out.println("R= " + r + " G= " + g + " B= " + b);
                return background;
            }

    public static final java.awt.Color darkGray  = new java.awt.Color(64, 64, 64);
    public static final Background DARK_GRAY = getBackground(64,64,64);
    public static final Background WHITE = getBackground(255,255,255);
    public static final Background LIGHT_GRAY = getBackground(192,192,192);
    public static final Background GRAY = getBackground(128,128,128);
    public static final Background BLACK = getBackground(0,0,0);
    public static final Background RED = getBackground(255,0,0);
    public static final Background PINK = getBackground(255,175,175);
    public static final Background ORANGE = getBackground(255,200,0);
    public static final Background YELLOW = getBackground(255,255,0);
    public static final Background GREEN = getBackground(0,255,0);
    public static final Background MAGENTA = getBackground(255,0,255);
    public static final Background CYAN = getBackground(0,255,255);
    public static final Background BLUE = getBackground(0,0,255);
}
 

Jw456

Top Contributor
Etwas zum grundsätzlichen.
So wie du das machst blockirst du eigentlich h den Main Thread.
Du klickst den Button kommst in den listener und bleibst eigentlich darin. Endlos Schleife.
Nur die kurze Zeit wo du wartest gibst du die kontrolle an das System zurück.

Was du vorhast solltest du in einen Thread machen nicht im Mainthread.

Der Listener sollte immer zügig wider verlassen werden und nicht das System Blockieren und keine Endlos Schleifen bilden.
 

Mart

Top Contributor
Java:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
    @Override
    public void run() {
        System.out.println("1 Sekunde vergangen");
    }
};
timer.scheduleAtFixedRate(task, 0, 1000);
einfacher wäre es den timer zu starten
 

Jw456

Top Contributor
javafx kann auf eigene threads manchmal komisch reagieren...

deswegen nehme ich das her wo man weis dass es funktioniert
und ein Teil einer bibliothek wird im regelfall immer besser funktionieren als etwas was man selbst geschrieben hat
Das ist klar. Ich wollte ihm erst mal sagen das der Weg den er versuche nicht zum Erfolg führen wird. Denn er verlässt ja den listener nicht.
Und das ist ganz schlecht.
 

Mart

Top Contributor
Verlasse ich den Listener nicht, wenn ich von ihm aus eine Methode aufrufe?
du machst folgendes

javafx -> scene -> scene event -> event an listener -> listener sagt warten -> javafx wartet

deine ganze app wartet darauf dass das warten mal fertig ist

dh du musst mit threads bzw parallelisierung arbeiten um folgendes ziel zu erreichen

javafx -> scnee -> scene event -> event an listener -> listener startet thread -> listener ist fertig -> javafx macht weiter
und parallel dazu der thread:
such node -> male bunt an und warte -> nachc warten wieder anders anmalen


ich hoffe du siehst das problem mit dem warten :)
 

Mart

Top Contributor
der listener passiert in dem javafx thread

um genau zu sein wird eine event dispatch chain abgearbeitet die ich nur noch grob weis

event capture -> target finden dingsbums ( ka was da das zweite war ) -> filter abarbeiten ( eventfilter ) -> bubbling phase ( ausführen des event listeners + den pfad von dem wo das event gekommen ist ( also immer scene) zurück latschen )


deine bubble phase wird nicht fertig dh:
du bist in der endlos schleife -> scene hängt sich auf bis der listener fertig ist
dein eventlistener wird nicht fertig -> das event wird nicht wie ne blase zurück zur scene gebracht ( was eig wurscht ist)


in der ganzen prozedur "verlässt" du den javafx application thread nicht das war mit verlassen gemeint
da du ja nie fertig wirst kann der fx thread nicht mehr weiter machen und dann hängt es sich auf

deswegen brauchst du etwas was parallel läuft ergo => threads bzw ähnliches
 

Jw456

Top Contributor
der listener passiert in dem javafx thread

um genau zu sein wird eine event dispatch chain abgearbeitet die ich nur noch grob weis

event capture -> target finden dingsbums ( ka was da das zweite war ) -> filter abarbeiten ( eventfilter ) -> bubbling phase ( ausführen des event listeners + den pfad von dem wo das event gekommen ist ( also immer scene) zurück latschen )


deine bubble phase wird nicht fertig dh:
du bist in der endlos schleife -> scene hängt sich auf bis der listener fertig ist
dein eventlistener wird nicht fertig -> das event wird nicht wie ne blase zurück zur scene gebracht ( was eig wurscht ist)


in der ganzen prozedur "verlässt" du den javafx application thread nicht das war mit verlassen gemeint
da du ja nie fertig wirst kann der fx thread nicht mehr weiter machen und dann hängt es sich auf

deswegen brauchst du etwas was parallel läuft ergo => threads bzw ähnliches
das sage ich schon die ganze zeit das er in einer endlos schleife ist
 

Hag2bard

Bekanntes Mitglied
Ich bin trotz eurer Erklärungen nicht dahinter gestiegen. Wenn ich den Listener aufrufe, der in der Methode handle() Bspw nur System.out.println aufruft, wird der Listener dann danach verlassen?
 

Jw456

Top Contributor
Java:
btnEinzahlen.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { System.out.println("HALLO"); System.out.println(i); changeBackground(); } });
Hier rufst du deine Methode auf was eine endlos Schleife ist.
changeBackground ()
 

Mart

Top Contributor
Ich bin trotz eurer Erklärungen nicht dahinter gestiegen. Wenn ich den Listener aufrufe, der in der Methode handle() Bspw nur System.out.println aufruft, wird der Listener dann danach verlassen?
ja aber darum gehts nicht

es geht darum wo du gerade bist


es gibt einen thread der deine javafx application verwaltet
die listener auszufürhren ist ein teil davon

nur du hast eine endlos schleife eingebaut = es pasiert nix mehr
 

Jw456

Top Contributor
wird der Listener dann danach verlassen?
Du verläßt den listener nicht du rufst eine Methode auf die endlos läuft.
Die schließende Klammer von dem listener wird nie erreicht.
Wenn du nach dem Aufruf der Methode noch eine Zeile mit irgendetwas einfügts wird die nie ausgeführt.
Weil du nie aus deiner endlos Schleife zurück kommst. Und den listener beendet.
 

Mart

Top Contributor
du weist sicherlich dass 1 programm einen befehl nacheinander ausführt

nun wie kommst du aus der changebackground methode wieder raus?
Java:
    public void changeBackground() {
        this.vbox.setBackground(this.background[i]);
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        i++;
        if (i == 12) i = 0;
        changeBackground();
    }
meines erachtens ist das eine absolute endlosschleife
 

Jw456

Top Contributor
du weist sicherlich dass 1 programm einen befehl nacheinander ausführt

nun wie kommst du aus der changebackground methode wieder raus?
Java:
    public void changeBackground() {
        this.vbox.setBackground(this.background[i]);
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        i++;
        if (i == 12) i = 0;
        changeBackground();
    }
meines erachtens ist das eine absolute endlosschleife
Genau so ist es
 

Mart

Top Contributor
Hilfe ..:
//// -> du gehst beim listener rein in die methode, i ist irgendwo definiert
public void changeBackground() {
    /// setzt den background wahrscheinlich richtig
        this.vbox.setBackground(this.background[i]);
    /// irgendein thread sleeped ist aber hier nicht von belangen und unwichtig für dein problem, da der thread nix macht als im hintergrund zu warten        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    //// dein i mit irgend einem wert wird erhöht
        i++;
    //// dein i wird wieder runter gesetzt was irgendwas mit den backgrounds macht -> unwichtig
        if (i == 12) i = 0;
    //// dann startest du die methode neu
        changeBackground();
// hier steht deine abbruch bedingung -> jap die ist leer  ===== endlos schleife
    }
ich hoffe du siehst jetzt dass die methode sich selbst aufruft und sich niemals beenden wird
 

Hag2bard

Bekanntes Mitglied
Natürlich ich weiß das ist eine endlos Schleife, der Background wird gesetzt aber er zeichnet die Grafik nicht direkt neu, das ist ja meine Frage.
 

Mart

Top Contributor
ich weis nicht ob die backgrounds richtig sind
bzw du sagst deinen javafx thread nichts zu machen für 300 milisekunde = den juckts nicht dass du die backgrounds änderst

mit
Java:
this.vbox.setStyle("-fx-background-color: rgb(40,40,40);")
sollte es gehen

dann sollte es trotz der endlos schleife deine box anmalen
 

Jw456

Top Contributor
In der Methode rufst du das zetzen farbe von der Gui auf. Aber erst in der Pause hat die gui Zeit deinen Befehl auszuführen.
Würdest du nicht warten würdest du nichts sehen.
 

Jw456

Top Contributor
Beim Warten wird für diesen Moment die Kontrolle wider an die gui zurück gegeben.
Und da kann sie deinen Zeichen Befehl ausführen.
 

kneitzel

Top Contributor
Natürlich ich weiß das ist eine endlos Schleife, der Background wird gesetzt aber er zeichnet die Grafik nicht direkt neu, das ist ja meine Frage.
Nur das generelle Vorgehen bei den meisten UI Applikationen:

Es gibt einen UI Thread und dieser bearbeiten Nachrichten. Bei Windows ist eine Nachricht z.B. die WM_PAINT Nachricht, die besagt, dass etwas (z.B. ein Fenster) neu gemalt werden soll. Der Thread macht also nichts anderes als ständig nach einer neuen Nachricht zu schauen um diese dann abzuarbeiten.

Nun kommt eine Nachricht: Der Anwender hat einen Knopf gedrückt oder so. Diese Nachricht verarbeitet jetzt der Thread und stellt fest: Hey - der Entwickler will da etwas machen. Also wird Dein Event Code ausgeführt. Dieser setzt nun den Hintergrund um. Das Control weiss aber: Wenn mein Aussehen sich geändert hat, dann muss ich neu gemalt werden. Also schickt das Control sich selbst eine solche WM_PAINT Nachricht.
Aber nun blockierst Du den Thread, der die Nachrichten abarbeitet, weiterhin. Windows bekommt mit, dass Nachrichten nicht mehr abgearbeitet werden und daher sagt Windows ggf., dass die Applikation nicht mehr reagiert. Du änderst den Hintergrund dann irgendwann erneut, es wird noch eine WM_PAINT Nachricht verschickt ... aber Du blockierst weiterhin den Thread, der die Nachrichten abarbeitet ...

Im echten Leben ist es so, als ob Du Aufgaben abarbeitest. Und Du kannst zu mir kommen und dann stehst Du bei mir und bleibst so lange bei mir, bis ich sage: Ich bin fertig. Ich kann dir dann Aufgaben geben: Kauf Äpfel. Du schreibst Dir einen Zettel... dann warte ich weiter, mache irgendwas ... sage Dir dann wieder: Kaufe Äpfel! ... Das Spiel können wir ewig spielen: Wann kaufst Du die Äpfel? Nie! Denn ich lasse Dich ja nie weg!

Daher: NIE ein Thread.sleep im UI Thread / EDT Thread / ... (Jedes Framework hat da eigene Namen zu!) In diesem Thread werden immer nur ganz kurze Dinge gemacht. Alles, was etwas Zeit dauert, muss in andere Threads verlagert werden! Oder wie bei Dir: Du kannst das Ändern im UI Thread machen, aber statt ein Sleep zu machen musst Du dafür sorgen, dass dies regelmäßig aufgerufen wird.

Das einfach mal in ganz kurz und knapp eine Erläuterung.
 

sascha-sphw

Top Contributor
ich hoffe du siehst jetzt dass die methode sich selbst aufruft und sich niemals beenden wird
Genau genommen wird sie das, und zwar mit einer StackOverflow Exception. Da der Aufruf rekursiv ist und die Methode nie einen return liefert, ist der Stack irgendwann voll. Es scheint nur Endlos, da Thread.sleep alles in die länge zieht.
 

Hag2bard

Bekanntes Mitglied
Also wie bereits erwähnt wusste ich dass das eine Endlosschleife ist, mir ging es nur darum herauszufinden, wie schnell er die Farben wechseln kann, da ich mir daraus eine Animation bauen wollte. Ich wusste allerdings nicht, dass ich Java nie die Gelegenheit gebe das Fenster neu zu zeichnen. Ich hab das erst in einer For Schleife versucht aber da hat es auch nicht neu gezeichnet. Ich weiß es gibt ein javafx.Animation aber durch diese Vorgehensweise und euch habe ich erstmal verstanden wie Threads usw funktionieren. 2 Fragen noch: ergibt meine Launcher Methode einen Sinn oder geht das auch anders? Ich will nicht dass meine GUI Klasse auch die Main Klasse ist, da habe ich nur Ärger mit. Durch das Launch, starte ich dadurch einen Thread? Ist das dann der javafx Thread?
 

kneitzel

Top Contributor
ergibt meine Launcher Methode einen Sinn oder geht das auch anders? Ich will nicht dass meine GUI Klasse auch die Main Klasse ist, da habe ich nur Ärger mit.
Also ich würde diesen Aufbau als unüblich bezeichnen. Was ist Gui denn für eine Klasse? Insgesamt passt das alles nicht wirklich zusammen.

Ich habe immer gerne klare Klassen mit klaren Aufgaben / Bezeichnern. Und dann habe ich in der Regel bei JavaFX eine Klasse, die von Application erbt, die main Methode enthält und ansonsten nichts wirkliches beinhaltet. Das sieht dann so in der Art aus:
Java:
public class Main extends Application {
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) throws IOException {
        primaryStage.setTitle("Address Management");
        ViewTuple<AddressListView, AddressListViewModel> viewTuple = FluentViewLoader.fxmlView(AddressListView.class).load();
        Parent root = viewTuple.getView();
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

Den Inhalt von start muss man nicht direkt so nehmen Das ist jetzt einfach etwas Code, das mvvmfx mit FluentViewLoader nutzt. Aber das kann natürlich auch einfach ein FXMLLoader haben oder von mir aus eine Klasse, die in Code alles erstellt (also zB. Scene erweitert oder so)

Durch das Launch, starte ich dadurch einen Thread? Ist das dann der javafx Thread?
Du erstellst nirgends einen Thread. Aber was das Framework alles im Hintergrund macht, ist erst einmal egal. Aber wenn man es genau nimmt, dann ist es so, dass die main Methode von dem Hauptthread der Applikation aufgerufen wird. Im Rahmen der launch Methode des Frameworks wird ein neuer Thread erzeugt, der dann der JavaFX Application Thread ist und die start Methode läuft dann in diesem neuen Thread.
 

Hag2bard

Bekanntes Mitglied
Aber wie baue ich mein kleines Beispiel um, dass es ein üblicher Aufbau wäre? Ich will ja nicht jeden Button den ich setze in die Main Klasse setzen. Die Gui Klasse könnte ich jetzt z.b. auch MainMenu nennen, das trifft es vielleicht eher.
 

kneitzel

Top Contributor
Das gehört ja auch nicht in die Main Klasse.

MainMenu kann brauchbar sein, nur dabei würde ich wirklich an ein Menu denken, also das was man als Kontextmenu oder als Menuzeile hat. Ich würde da etwas nehmen wie MainView. Da wird ja auch alles erstellt für die Scene (ähnlich wie jetzt schon).

Dabei kannst Du Dir überlegen, ob Du die MainView von Scene ableiten willst oder ob du statt inheritance eben composition verwendest. (Composition over inheritance, daher ist Letzteres eher zu verwenden. Also eigentlich so, wie Du es schon hast).

Deine Hauptklasse wäre dann etwas wie:
Java:
public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage stage) {
        MainView view = new MainView();
        stage.setScene(view.getScene());
        stage.show();
    }
}

Das, was Du derzeit in der start Methode hast, wandert dann größtenteils in den Konstruktor. Lokale Variablen werden zu Instanzvariablen - zumindest die Scene mainMenu, denn die musst Du bei getScene zurück geben.
 

Hag2bard

Bekanntes Mitglied
Ok perfekt, das hilft mir schonmal viel weiter.
Den Satz Composition over inheritance, daher ist Letzteres eher zu verwenden verstehe ich jetzt nicht so ganz, ist es jetzt besser inheritance zu verwenden?
 

Mart

Top Contributor
MainMenu kann brauchbar sein, nur dabei würde ich wirklich an ein Menu denken, also das was man als Kontextmenu oder als Menuzeile hat. Ich würde da etwas nehmen wie MainView. Da wird ja auch alles erstellt für die Scene (ähnlich wie jetzt schon).
in javafx gibt es die GUI elemente Menuitem, Menubutton usw und diese haben eher so einen drop down bzw menü auswahl style deswegen würde man bei einem menu als aussentehender an ein drop down oder ähnliches denken -> das ist dann nur kurze verwirrung

bei view weis man es handlet sich um das ganze drum bzw einen teil der ansicht

das könnte das von kneitzel gesagte etwas präzisieren
 

kneitzel

Top Contributor
Ok perfekt, das hilft mir schonmal viel weiter.
Den Satz Composition over inheritance, daher ist Letzteres eher zu verwenden verstehe ich jetzt nicht so ganz, ist es jetzt besser inheritance zu verwenden?
Nein, Composition ist eher zu verwenden. Also so wie Du es bereits gemacht hast. Die Klasse enthält die Scene und ist keine Scene.

Also etwas wie:
Java:
public class MainView {
    Scene mainScene;
    
    public Scene getScene() { return mainScene; }
}
und dann die Verwendung von mainView.getScene() ist besser und vielseitiger als die MainView selbst zu einer Scene zu machen:
Java:
public class MainView extends Scene {
}
und dann eben die Instanz der Klasse direkt als Scene zu nutzen.

Sorry, wenn ich Dich mit dem Part unnötig verwirrt habe, denn die Erwähnung war hier ja im Prinzip überflüssig. (Man findet es nur leider regelmäßig, dass dies in der GUI Entwicklung nicht beachtet wird und unnötig viel vererbt wird.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JavaFx - SceneBuilder Java Basics - Anfänger-Themen 5
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
J Javafx Eventhandler zu jedem Node Java Basics - Anfänger-Themen 1
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T HTMLEditor JavaFX Java Basics - Anfänger-Themen 4
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
R Umsetzungsplan JavaFx App Java Basics - Anfänger-Themen 9
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
P JavaFx einrichten Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
D JAVAFX WebVIEW zu JSOUP Java Basics - Anfänger-Themen 3
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J javafx mediaplayer mit https Java Basics - Anfänger-Themen 3
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
O JavaFX XML Versuch Java Basics - Anfänger-Themen 2
O JavaFX Java Basics - Anfänger-Themen 7
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
I Javafx Tabpane Reiter blockieren Java Basics - Anfänger-Themen 1
S JavaFX Beginneraufgabe Java Basics - Anfänger-Themen 1
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
U Javafx Array aus Buttons Java Basics - Anfänger-Themen 2
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
P JavaFX ohne FXMLLoader Java Basics - Anfänger-Themen 3
K JavaFX UI controls Java Basics - Anfänger-Themen 1
B Farbverlauf erstellen ohne Javafx, AWT usw.? Java Basics - Anfänger-Themen 34
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
R Threads in JavaFX Java Basics - Anfänger-Themen 3
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
Spencer Reid JavaDoc zu JavaFx hinzufügen Java Basics - Anfänger-Themen 1
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D OOP JavaFX objektorientiert Java Basics - Anfänger-Themen 2
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
D Javafx XYChart Variable in Schleife erzeugen? Java Basics - Anfänger-Themen 18
E JavaFX und Java auf Kommandozeile compilen Java Basics - Anfänger-Themen 2
J Webanwendung JavaFX Java Basics - Anfänger-Themen 4
Povlsen84 [javafx] Zusammenarbeit mit Tomcat Java Basics - Anfänger-Themen 4
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
M TableModel Hintergrundfarbe Java Basics - Anfänger-Themen 6
P Hintergrundfarbe aus drei Scrollbars Java Basics - Anfänger-Themen 5
B Die Hintergrundfarbe eines deaktivierten buttons ändern? Java Basics - Anfänger-Themen 4
I Netbeans - jTabbedPane Hintergrundfarbe ändern Java Basics - Anfänger-Themen 13
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
P DefaultTreeCellRenderer Hintergrundfarbe Java Basics - Anfänger-Themen 3
I Hintergrundfarbe einer Zelle in einer JTable Java Basics - Anfänger-Themen 10
B Hintergrundfarbe laufend verändern Java Basics - Anfänger-Themen 14
P Hintergrundfarbe einer anderen Klasse ändern Java Basics - Anfänger-Themen 7
C Hintergrundfarbe Java Basics - Anfänger-Themen 7
U JPanel und Hintergrundfarbe Java Basics - Anfänger-Themen 5
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 3
S Hintergrundfarbe lässt sich nicht ändern Java Basics - Anfänger-Themen 2
B JTable und Hintergrundfarbe Java Basics - Anfänger-Themen 5
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
J Hintergrundfarbe für Textfelder Java Basics - Anfänger-Themen 4
G Hintergrundfarbe eines JLabels Java Basics - Anfänger-Themen 3
K Hintergrundfarbe einer Tabellen-Zelle verändern Java Basics - Anfänger-Themen 2
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
B Filepath "ändern"? Java Basics - Anfänger-Themen 5
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
J Itext-Paragraph Position ändern Java Basics - Anfänger-Themen 13
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11

Ähnliche Java Themen


Oben