Как узнать, какая кнопка нажата в javafx - PullRequest
0 голосов
/ 24 мая 2019

Как узнать, какая кнопка активировала функцию. Я прочитал другие ответы на stackoverflow , как этот . Я попытался создать новую кнопку и присвоить ей значение event.getSource(), но она не работает

    @FXML
    Button v1;
    @FXML
    Button v2;
    @FXML
    Button v3;
    @FXML
    Button v4;
    @FXML
    Button v5;
    @FXML
    Button v6;


public void printButton(ActionEvent event){

            Button sourceButton = (Button) event.getSource();

            if(sourceButton == v1){
                System.out.print("v1");
            }

            else if(sourceButton == v2){
                System.out.print("v2");
            }

            else if(sourceButton == v3){
                System.out.print("v3");
            }

            else if(sourceButton == v4){
                System.out.print("v4");
            }

            else if(sourceButton == v5){
                System.out.print("v5");
            }

            else if(sourceButton == v6){
                System.out.print("v6");
            }
        }

Я создал кнопку в fxml , и она вызывает ту же функцию printButton ();

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Этот ответ использует для тестирования обновление Java 211.

В комментариях предполагается, что изменение == на .equals() было решением этой проблемы. Тем не менее, Button не переопределяет .equals(), поэтому оба эти способа делают одно и то же.

Запуск приведенного ниже примера приложения для тестирования привел к тому, что все 3 кнопки работали должным образом. Поэтому, возможно, что-то неправильное в файле FXML с кодом OP, который (как я пишу это) не был показан из OP.

В приведенном ниже примере обратите внимание, что файл fxml:

  • Указывает контроллер с fx:controller="sample.Controller"
  • Содержит 3 кнопки с идентификаторами, точно совпадающими с теми, которые объявлены в контроллере
  • На каждой кнопке содержится onAction="#printButton", а имя в кавычках соответствует имени метода в Controller onAction="#printButton".

Обратите внимание, что все они находятся в одном пакете.

Main.java:

package sample;

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

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


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

Controller.java

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class Controller {

    @FXML
    Button v1;
    @FXML
    Button v2;
    @FXML
    Button v3;

    public void printButton(ActionEvent event){

        Button sourceButton = (Button) event.getSource();

        if(sourceButton.equals(v1)){
            System.out.print("v1");
        }

        else if(sourceButton == v2){
            System.out.print("v2");
        }

        else if(sourceButton == v3){
            System.out.print("v3");
        }

    }
}

sample.fxml

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox alignment="CENTER" spacing="10.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
    </padding>
    <HBox alignment="CENTER" spacing="10.0">
        <Button fx:id="v1" mnemonicParsing="false" onAction="#printButton" text="Button 1"/>
        <Button fx:id="v2" mnemonicParsing="false" onAction="#printButton" text="Button 2"/>
        <Button fx:id="v3" mnemonicParsing="false" onAction="#printButton" text="Button 3"/>
    </HBox>
    <Label text="Source:"/>
    <Label fx:id="lblSource"/>
</VBox>
0 голосов
/ 25 мая 2019

упростить вашу жизнь. Как насчет использования функции isPressed()?

                 if( v1.isPressed() )  {
                 name2 = n1.getText(); 

               System.out.println("   V1  got called ");
                 }  

v1.isPressed(); означает проверку, нажата ли v1 или нет, она возвращает истину или ложь

яне уверен насчет также v1.isfire(); Я думаю, что это может сделать автоматический клик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...