JavaFX CheckBoxen in GUI verschieben

User089

Mitglied
Hallo,

ich habe vier CheckBoxen in einem Array erstellt und möchte gerne, dass die CheckBoxen nach dem anklicken automatisch ganz nach unten in der GUI verschoben werden. Hier mein Code.
Danke schon mal!

package application;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.VBox;


public class Main extends Application {

int i;

@Override
public void start(Stage primaryStage) {
try {
VBox root = new VBox();
String[] name = {"1", "2", "3", "4"};
CheckBox[] cb = new CheckBox[name.length];
for(i = 0; i < name.length; i++) {
cb = new CheckBox(name);
}

cb[i-1].setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
if(cb.isSelected()) {
cb[cb.length] = cb;
}
}
});
root.getChildren().addAll(cb);

Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();

} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
launch(args);
}
}
 
ich versteh nicht wo die hin wandern sollten mach vllt ne zeichnung und poste code im chat wenn du beim chat </> symbol anklickst
 
Die CheckBox 1 die ganz oben in der GUI ist soll wenn sie angeklickt wird an Position 4 und die anderen nach oben rutschen.
Ursprünglich:
1
2
3
4

Danach:
4
1
2
3
 
Hier nochmal der Code.


Java:
package application;
    
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.VBox;


public class Main extends Application {
    
    int i;
    
    @Override
    public void start(Stage primaryStage) {
        try {
            VBox root = new VBox();
            String[] name = {"1", "2", "3", "4"};
            CheckBox[] cb = new CheckBox[name.length];
            for(i = 0; i < name.length; i++) {
                cb[i] = new CheckBox(name[i]);
            }
            
            cb[i-1].setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent event) {
                    if(cb[i].isSelected()) {
                        cb[cb.length] = cb[i];
                    }
                }
            });
            root.getChildren().addAll(cb);
            
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
 
Java:
if(isSelected())vbox.getChildren.remove(selected);
vbox.getChildren.add(selectedBox())
 
Irgendwie funktioniert das mit diesem Code nicht. Hat jemand eine andere Idee?
Kann ich eigentlich mit dieser Zeile in meinem Code "cb[i-1].setOnAction(new EventHandler<ActionEvent>()" auf alle CheckBoxen zugreifen, wenn sie angeklickt werden?
 
Java:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.VBox;


public class Main extends Application {
    
    int i;
    
    @Override
    public void start(Stage primaryStage) {
        try {
            VBox root = new VBox();
            String[] name = {"1", "2", "3", "4"};
            CheckBox[] cb = new CheckBox[name.length];
            for(i = 0; i < name.length; i++) {
                cb[i] = new CheckBox(name[i]);
                root.getChildren().add(cb[i]);
            
                cb[i].setOnAction(new EventHandler<ActionEvent>() {

                    @Override
                    public void handle(ActionEvent event) {
                        CheckBox cb = (CheckBox) event.getSource();
                        if(cb.isSelected()) {
                            root.getChildren().remove(cb);
                            root.getChildren().add(cb);
                        }
                    }
                });

            }
            
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}
 
warum diskutiert immer jeder.. wenn ich keine Ahnung hätte würde ich es ja nicht schreiben ... dann kommt ein "dein ding geht nicht" ... ich werd wohl kaum mit absicht was falsches sagen

dass man noch ein fünferl selbst einbringen muss und vllt mal ausprobiert und vllt der fremde im internet doch recht hat ...
 
Ich würde nie für mich in Anspruch nehmen, dass der Code, den ich hier poste, immer das macht, was er soll, ich mache schließlich auch Fehler.
Aber ich erwarte mir als Rückmeldung mehr als "geht nicht". Das erweckt den Eindruck, als hätte sich derjenige überhaupt nicht damit beschäftigt, sondern einfach nur copy/paste angewendet.
 
@Neumi5694 was willst du denn großartiges erwarten, wenn Code einfach so mühelos hin geklatscht wird ohne mal Code-Tags zu benutzen? Das zeigt doch schon, dass sich der TE in keinster Weise Mühe gibt.
 
Sorry, ich wollte niemanden kritisieren. Ich habe durchaus einiges versucht aber da ich Anfänger bin, bin ich nicht auf diese Zeile Code gekommen "CheckBox cb = (CheckBox) event.getSource();". Danke trotzdem.
 
Sorry, ich wollte niemanden kritisieren. Ich habe durchaus einiges versucht aber da ich Anfänger bin, bin ich nicht auf diese Zeile Code gekommen "CheckBox cb = (CheckBox) event.getSource();". Danke trotzdem.
Alles gut, solche Diskussionen passieren hier immer wieder. Wir schweifen gern vom Thema ab.
Es ist aber immer gut, wenn du sagst, was nicht funktioniert und eventuell dann auch zeigst, was du probiert hast.

Bei "Es gab einen Fehler/eine Exception" fällt mir immer wieder die Begründung für gewisse Plots in Filmen ein: "This happens because of reasons".
 
was man vllt noch anmerken kann ist dass dieses vorgehen vllt zu motion sickness führen kann

motion sickness ist ansich am computer oder bildschirm wird was dargestellt wovon unser gehirn nicht davon ausgeht

zb du machst ein VR game und du bist auf dem kopf aber der raum nicht => du wirst im strahl kotzen weils dein gehirn nicht verträgt

die liste wird sich sofort veärndern weil javafx schnell ist => könnte sein dass das der kopf nicht verträgt

würdest du 2 vboxen haben und diese in einen kasten tun und je nach selektion in die kasten platzieren wäre es für den kopf verständlicher => Benutzer sind wichtig bei anwendungen


nur so nebenbei erwähnt
 
Danke für die Info 👍. Ich versuche eine Einkaufslisten-Anwendung nachzubauen, in der die ausgewählten Artikel in der Liste nach unten rutschen.
 
dann mach 2 boxen mit drag and dropp vllt.. das tauschen verwirrt => verwirrung macht kopfweh
 

Zurück
Oben