Как открыть контекстное меню при нажатии кнопки настроек, используя javafx fxml. Действие должно быть каким-то методом в контроллере - PullRequest
0 голосов
/ 29 июня 2018

Как мы можем открыть контекстное меню при нажатии кнопки передач, используя javafx fxml.

следующий мой код fxml. Но это не открытие панели.

<HBox AnchorPane.topAnchor="1.0" AnchorPane.rightAnchor="5.0">
    <children>
        <Button fx:id="settings" style="-fx-background-color: transparent;">
            <graphic>
                <ImageView fitHeight="55.0" fitWidth="15.0" 
                  pickOnBounds="true" preserveRatio="true">
                    <image>
                        <Image url="@settings.png"/>
                    </image>
                </ImageView>
            </graphic>
            <contextMenu>
                <ContextMenu>
                    <items>
                        <MenuItem text="Action" />
                    </items>
                </ContextMenu>
            </contextMenu>
        </Button>
    </children>
</HBox>

Вот мой код, где я определяю сцену.

if (response.getStatusLine().getStatusCode() == 200 )
{
    logger.info("Displaying Home Page");
    Stage stage = new Stage();
    Parent root = FXMLLoader.load(getClass().getResource("trayScreen.fxml"));
    root.setId("rootnode");
    stage.setScene(new Scene(root, 350, 425));
    stage.initStyle(StageStyle.TRANSPARENT);
    stage.getScene().getStylesheets().
       setAll(TrayScreen.class.getResource("main.css").toString());
    stage.show();
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Почему бы вам не использовать MenuButton вместо ContextMenu внутри Button

<MenuButton fx:id="menu_button" mnemonicParsing="false" text="MenuButton">
        <items>
          <MenuItem mnemonicParsing="false" onAction="#firstItemAction" text="Action 1" />
          <MenuItem mnemonicParsing="false" onAction="#secondItemAction" text="Action 2" />
        </items>
</MenuButton>

В вашем FXMLController:

...
@FXML
private MenuButton menu_button;


@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}

@FXML
private void firstItemAction(ActionEvent event) {
}

@FXML
private void secondItemAction(ActionEvent event) {
}

enter image description here

0 голосов
/ 29 июня 2018

Я рекомендую использовать MenuButton вместо обычной кнопки & ContextMenu. Таким образом, контекстное меню открывается по щелчку с помощью основной кнопки мыши, а не только по нажатию дополнительной кнопки мыши.

Чтобы зарегистрировать обработчик действий, вам нужно установить атрибут onAction вас MenuItem (<MenuItem onAction="#handlerMethod").

<MenuButton fx:id="settings" pickOnBounds="true">
    <graphic>
        <ImageView fitHeight="55.0" fitWidth="15.0" 
          preserveRatio="true">
            <image>
                <Image url="@settings.png"/>
            </image>
        </ImageView>
    </graphic>
    <items>
        <MenuItem text="Action" />
    </items>
</MenuButton>
...