0

I have a button which display a menu containing only one custom menu item. This menu item contains a textfield and a button. Here is my code:

helloApplication.java:

package com.example.demo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

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

helloController.java:

package com.example.demo;

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class HelloController {
    @FXML
    private Label welcomeText;

    @FXML
    protected void onHelloButtonClick() {
        welcomeText.setText("Welcome to JavaFX Application!");
    }
}

hello-view.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CustomMenuItem?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/18" fx:controller="com.example.demo.HelloController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
    </padding>
   <children>
      <MenuButton mnemonicParsing="false" text="MenuButton">
         <items>
            <CustomMenuItem hideOnClick="false" mnemonicParsing="false" text="Unspecified Action">
               <content>
                  <HBox prefHeight="100.0" prefWidth="200.0">
                     <children>
                        <TextField />
                        <Button mnemonicParsing="false" text="Button" />
                     </children>
                  </HBox>
               </content>
            </CustomMenuItem>
         </items>
      </MenuButton>
   </children>
</VBox>

This menu I want this menu item to be unselectable, just a pane poping to display the textfield. It is already not hidden when clicked. The problem is that when i enter some text in the textfield, and move the mouse cursor, the focus in the text field is lost because the menu item takes the focus:

enter image description here enter image description here

How can I prevent the menu item to react and let the text field keep the focus ? Is a custom menu item a good solution if I want only one menu item containing components ?

jewelsea
  • 150,031
  • 14
  • 366
  • 406
Skartt
  • 551
  • 2
  • 7
  • 19
  • 5
    I think putting a text field and a button is the wrong use for a menu. IMO, it is not what a menu is for, though you may get it work. I suggest you consider a different approach. Some [alternatives](https://stackoverflow.com/questions/12717969/javafx-2-custom-popup-pane/12718891#12718891). Unfortunately, the info in the linked post is a bit out of date. There are probably better resources available today (I just don't know where). – jewelsea Nov 17 '22 at 11:35

0 Answers0