JavaFX Menu soll nicht bei jedem Click verschwinden

D

Der_AltMann

Aktives Mitglied
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?
 
W

White_Fox

Top Contributor
Vielleicht in der EventHandler-Methode nochmal die show-Methode aufrufen? Jedenfalls würde ich aus dem Stand erstmal so etwas versuchen.

Edit: Was willst du denn erreichen?
 
D

Der_AltMann

Aktives Mitglied
Vielleicht in der EventHandler-Methode nochmal die show-Methode aufrufen? Jedenfalls würde ich aus dem Stand erstmal so etwas versuchen.

Edit: Was willst du denn erreichen?
hab das versucht aber hat nicht so gut geklappt:
Java:
checkMenuItem.selectedProperty().addListener((observableValue, oldValue, newValue) -> {
                checkMenuItem.getParentMenu().show();
//noch bisschen code
}

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
 
kneitzel

kneitzel

Top Contributor
Ich habe noch nicht den genauen Überblick. Du hast CheckMenuItem Elemente und wenn der Anwender da drauf klickt, soll das Menu offen bleiben?

Dann wäre evtl. dies die Lösung:
Dort wird dann eine CustomMenuItem mit einer Checkbox erstellt und auf dem CustomMenuItem wird setHideOnClick(false) aufgerufen.
 
D

Der_AltMann

Aktives Mitglied
Ich habe noch nicht den genauen Überblick. Du hast CheckMenuItem Elemente und wenn der Anwender da drauf klickt, soll das Menu offen bleiben?

Dann wäre evtl. dies die Lösung:
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?
Unbenannt.png
 
kneitzel

kneitzel

Top Contributor
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.
 
D

Der_AltMann

Aktives Mitglied
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.
klar

Java:
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");
                }
            });
        }

    }
 
kneitzel

kneitzel

Top Contributor
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:
Java:
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();
    }
}
 
D

Der_AltMann

Aktives Mitglied
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:
Java:
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();
    }
}
perfekt vielen Dank, funktioniert wunderbar😘
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Swing Menu Bar AWT, Swing, JavaFX & SWT 7
B JavaFX DropDown Menu mit ausführbaren Buttons AWT, Swing, JavaFX & SWT 1
F Popup Menu etwas verschieben AWT, Swing, JavaFX & SWT 2
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
B JavaFX Menu Ribbon AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
I Swing Menu->Beenden AWT, Swing, JavaFX & SWT 6
V Eclipse View Right-Click Menu hinzufügen AWT, Swing, JavaFX & SWT 2
I Menu mit Swing AWT, Swing, JavaFX & SWT 30
lumo SWT Shell & Menu AWT, Swing, JavaFX & SWT 2
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
S Dropdown menu / tree AWT, Swing, JavaFX & SWT 7
H JPanel/Menu AWT, Swing, JavaFX & SWT 14
M Pie Menu AWT, Swing, JavaFX & SWT 6
R Menu-Fenster - Teile von Fenster tauschen AWT, Swing, JavaFX & SWT 3
M Problem mit eigenem Menu Explorer AWT, Swing, JavaFX & SWT 6
G Rechtsklick-Menu bei JTable AWT, Swing, JavaFX & SWT 4
L Frage zu Erstellung des Menu mit JFace AWT, Swing, JavaFX & SWT 2
G Menu Vorlage gesucht. AWT, Swing, JavaFX & SWT 4
B Menu aktualisieren AWT, Swing, JavaFX & SWT 2
S Parent eines Menu-Eintrages ermitteln? AWT, Swing, JavaFX & SWT 3
J java menu+button problem AWT, Swing, JavaFX & SWT 6
G JButton als Basis für Menu AWT, Swing, JavaFX & SWT 2
G AnfängerSWING Frage Werkzeugleiste unter dem Menu AWT, Swing, JavaFX & SWT 3
L Popup-Menu AWT, Swing, JavaFX & SWT 2
L Menu Position verändern? AWT, Swing, JavaFX & SWT 24
G Dialog aus Menu AWT, Swing, JavaFX & SWT 3
I [Java 6] Tray-Menu und Bilder? AWT, Swing, JavaFX & SWT 3
G ActionListener vom Menu zu JPanel AWT, Swing, JavaFX & SWT 4
N Menu Problem AWT, Swing, JavaFX & SWT 3
C PullDown Menu AWT, Swing, JavaFX & SWT 2
J Darstellungsfehler Menu AWT, Swing, JavaFX & SWT 2
G menu wird verdeckt AWT, Swing, JavaFX & SWT 4
L Internationalisierung mittels ResourceBundle und Menu HotKey AWT, Swing, JavaFX & SWT 6
C JTable in Fenster anzeigen (über Menu) AWT, Swing, JavaFX & SWT 5
M Menu AWT, Swing, JavaFX & SWT 2
R Eine Art DropDown-Menu für JAVA? AWT, Swing, JavaFX & SWT 3
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
W JavaFX CSS - was soll mir das sagen? AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
V Swing Button soll unter anderem Button sein AWT, Swing, JavaFX & SWT 2
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
windl Warum soll ich zu JavaFX? AWT, Swing, JavaFX & SWT 18
H Java3D, ViewP Translattform soll sich nach einerformgroup richten. AWT, Swing, JavaFX & SWT 5
S Hauptfenster soll geöffnet bleiben AWT, Swing, JavaFX & SWT 4
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
RawBit DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
D Swing jSlider soll selber weiterwandern, je nach zeit der musik AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
S JVM von Oracle/Sun soll für AWT/SWING Elemente die die Optimierungen der NVidia Treiber verwenden AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
X Swing Bei Buttonklick soll PopupMenu erscheinen AWT, Swing, JavaFX & SWT 2
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
sla89 Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
2 Anfänger problem: Buttenklick soll reagieren AWT, Swing, JavaFX & SWT 9
D JTextField soll nur Integer als Eingabewert annehmen AWT, Swing, JavaFX & SWT 5
N JFreeChart: Plot soll mit skalieren AWT, Swing, JavaFX & SWT 5
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben