Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
JavaFXMenu soll nicht bei jedem Click verschwinden
Ich habe in Javafx ein menu, indem sich mehrere CheckMenuItems befinden. Ich hätte es gerne, dass bei einem click auf das CheckMenuItem sich das Menü nicht einklappt. Ist das irgendwie möglich?
ich möchte, dass man mehrere Items in dem Menü auswählen kann und dann mit einem MenuItem "apply" werden alle ausgewählten Items gesammelt und damit eine Funktion ausgeführt. Es ist natürlich nervig wenn man 3 Items auswählen will und dazu 3 mal das Menü öffnen muss
I'm new with Java, I would like to know how to prevent MenuButton popup from closing when I click on the item, I tried the following function, which I found on this site, but does not seem to do an...
stackoverflow.com
Dort wird dann eine CustomMenuItem mit einer Checkbox erstellt und auf dem CustomMenuItem wird setHideOnClick(false) aufgerufen.
I'm new with Java, I would like to know how to prevent MenuButton popup from closing when I click on the item, I tried the following function, which I found on this site, but does not seem to do an...
stackoverflow.com
Dort wird dann eine CustomMenuItem mit einer Checkbox erstellt und auf dem CustomMenuItem wird setHideOnClick(false) aufgerufen.
vielen dank das funktioniert 👍
allerdings wird bei mir der Text in der Checkbox nur angezeigt, wenn ich mit der Maus drüber fahre.
kann man das irgendwie ändern?
Kannst Du mir evtl. Deinen Code etwas zeigen? Dieses Verhalten sehe ich bei mir nicht. Eine Fehlersuche ist recht schwer, wenn man den Fehler nicht nachvollziehen kann.
Kannst Du mir evtl. Deinen Code etwas zeigen? Dieses Verhalten sehe ich bei mir nicht. Eine Fehlersuche ist recht schwer, wenn man den Fehler nicht nachvollziehen kann.
List<CustomMenuItem> items;
private void initDropdown() {
ArrayList<String> slaves = ldfParser.getNodes().getSlaves();
if (items == null) {
items = new ArrayList<>();
for (String slave : slaves) {
CheckBox box = new CheckBox(slave);
CustomMenuItem menuItem = new CustomMenuItem(box);
menuItem.setHideOnClick(false);
items.add(menuItem);
}
}
nodeOptions.getItems().clear();
nodeOptions.getItems().addAll(items);
MenuItem applyButton = new MenuItem("apply");
applyButton.setStyle("-fx-background-color:green");
nodeOptions.getItems().add(applyButton);
applyButton.setOnAction(e -> {
sensorcontroller.communicationStopped(null);
setupLin.restartLin(selectedSlaves);
try {
viewSensorValues(null);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
});
// if a new value is selected in the dropdown menu it is added to an arraylist
for (CustomMenuItem customItem : items) {
CheckBox box = (CheckBox) customItem.getContent();
box.selectedProperty().addListener((observableValue, oldValue, newValue) -> {
if (newValue) {
boolean found = false;
for (String string : selectedSlaves) {
if (string.contentEquals(box.getText())) { // it is already in the list
found = true;
}
}
if (!found) {
selectedSlaves.add(box.getText());
appendText(selectedSlaves.toString());
appendText("bin in der newvalue");
}
} else {
selectedSlaves.remove(box.getText());
appendText(selectedSlaves.toString());
appendText("bin in der else");
}
});
}
}
Ok, ich hatte es einfach mit einem Button getestet wie in dem Link. Wenn man es in eine MenuBar und Menu packt, dann ist es tatsächlich so, dass bei ausgewählter Checkbox der Text nicht zu sehen ist, wenn die Maus nicht auf dem Element ist.
Eine Lösung, die ich gefunden habe ist das Setzen der TextFill Property:
Java:
box.setTextFill(Paint.valueOf("#000000"));
Ein kleines Testprogramm, in das ich etwas Deinen Code integriert habe:
[CODE lang="java" highlight="21"]import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.util.*;
import javafx.scene.paint.*;
public class CheckMenuKeepOpen extends Application {
private Menu nodeOptions;
private List<CustomMenuItem> items;
private void initDropdown() {
String[] slaves = new String[]{"Slave 1", "Slave 2", "Slave 2"};
if (items == null) {
items = new ArrayList<>();
for (String slave : slaves) {
CheckBox box = new CheckBox(slave);
box.setTextFill(Paint.valueOf("#000000"));
CustomMenuItem menuItem = new CustomMenuItem(box);
menuItem.setHideOnClick(false);
items.add(menuItem);
}
}
nodeOptions.getItems().clear();
nodeOptions.getItems().addAll(items);
}
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
nodeOptions = new Menu("Nodes");
menuBar.getMenus().add(nodeOptions);
initDropdown();
BorderPane root = new BorderPane();
root.setTop(menuBar);
// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}[/CODE]
Ok, ich hatte es einfach mit einem Button getestet wie in dem Link. Wenn man es in eine MenuBar und Menu packt, dann ist es tatsächlich so, dass bei ausgewählter Checkbox der Text nicht zu sehen ist, wenn die Maus nicht auf dem Element ist.
Eine Lösung, die ich gefunden habe ist das Setzen der TextFill Property:
Java:
box.setTextFill(Paint.valueOf("#000000"));
Ein kleines Testprogramm, in das ich etwas Deinen Code integriert habe:
[CODE lang="java" highlight="21"]import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.util.*;
import javafx.scene.paint.*;
public class CheckMenuKeepOpen extends Application {
private Menu nodeOptions;
private List<CustomMenuItem> items;
private void initDropdown() {
String[] slaves = new String[]{"Slave 1", "Slave 2", "Slave 2"};
if (items == null) {
items = new ArrayList<>();
for (String slave : slaves) {
CheckBox box = new CheckBox(slave);
box.setTextFill(Paint.valueOf("#000000"));
CustomMenuItem menuItem = new CustomMenuItem(box);
menuItem.setHideOnClick(false);
items.add(menuItem);
}
}
nodeOptions.getItems().clear();
nodeOptions.getItems().addAll(items);
}
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
nodeOptions = new Menu("Nodes");
menuBar.getMenus().add(nodeOptions);
initDropdown();
BorderPane root = new BorderPane();
root.setTop(menuBar);
// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}[/CODE]