2015-08-10 6 views
0

Я использую Python и tkinter. Теперь я изучаю JavaFXML. У меня проблема с доступом к объектам через контроллеры. У меня есть класс с именем User. Я создаю пользователя в моем основном классе Java, который расширяет приложение. У пользователя есть местоположение X и местоположение Y. Когда я нажимаю кнопку, я хочу изменить местоположение своего пользователя. Я легко выполняю это при использовании JavaFX без FXML, поскольку все объявлено в том же классе. Но когда я использую FXML, я имею дело с классом контроллера, который понятия не имеет о классе User, так как я назвал его в своем основном классе. Я попытался инициировать класс User в контроллере, он казался глупым и не работал. Я также попытался найти способ передать объект пользователя контроллеру, но не смог найти страницу о том, как это сделать. Вот код:Метод доступа объекта при нажатии кнопки FXML

главный класс:

package simx; 

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

public class SimX extends Application { 
    User user; 
    World world; 
    Human human; 

    public SimX() { 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 

     user = new User(10, 10); 

     Parent root = FXMLLoader.load(getClass().getResource("UIFXML.fxml")); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 

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

} 

мой FXML:

<?import javafx.scene.text.*?> 
<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<AnchorPane id="AnchorPane" prefHeight="480.0" prefWidth="640.0"  xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"  fx:controller="simx.UIFXMLController"> 
    <children> 
     <GridPane layoutX="6.0" prefHeight="480.0" prefWidth="640.0"> 
     <columnConstraints> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
      <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
     </columnConstraints> 
     <rowConstraints> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
     </rowConstraints> 
     <children> 
      <GridPane prefHeight="121.0" prefWidth="193.0" GridPane.columnSpan="2" GridPane.rowSpan="2"> 
       <columnConstraints> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" /> 
       </columnConstraints> 
       <rowConstraints> 
        <RowConstraints minHeight="10.0" vgrow="SOMETIMES" /> 
        <RowConstraints minHeight="10.0" vgrow="SOMETIMES" /> 
        <RowConstraints minHeight="10.0" vgrow="SOMETIMES" /> 
       </rowConstraints> 
       <children> 
        <Button fx:id="moveEastButton" layoutX="10.0" layoutY="38.0" onAction="#handleMoveEastButtonAction" prefHeight="25.0" prefWidth="500.0" text="Move East" GridPane.columnIndex="2" GridPane.rowIndex="1" /> 
        <Button fx:id="moveSouthButton" layoutX="10.0" layoutY="38.0" onAction="#handleMoveSouthButtonAction" prefHeight="25.0" prefWidth="500.0" text="Move South" GridPane.columnIndex="1" GridPane.rowIndex="2" /> 
        <Button fx:id="moveWestButton" layoutX="10.0" layoutY="38.0" onAction="#handleMoveWestButtonAction" prefHeight="25.0" prefWidth="500.0" text="Move West" GridPane.rowIndex="1" /> 
        <Label alignment="CENTER" prefHeight="17.0" prefWidth="169.0" text="(X,Y)" GridPane.columnIndex="1" GridPane.rowIndex="1"> 
        <font> 
        <Font size="24.0" /> 
        </font> 
        </Label> 
        <Button fx:id="moveNorthButton" onAction="#handleMoveNorthButtonAction" prefHeight="25.0" prefWidth="500.0" text="Move North" GridPane.columnIndex="1" /> 
       </children> 
      </GridPane> 
     </children> 
     </GridPane> 
    </children> 
</AnchorPane> 

и мой контроллер:/*

package simx; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 

public class UIFXMLController implements Initializable { 

@FXML 
private Button moveNorthButton; 

@FXML 
private void handleMoveNorthButtonAction(ActionEvent event) { 
    System.out.println("Move North"); 
    user.moveNorth(); 
} 

@FXML 
private Button moveSouthButton; 

@FXML 
private void handleMoveSouthButtonAction(ActionEvent event) { 
    System.out.println("Move South"); 
} 

@FXML 
private Button moveEastButton; 

@FXML 
private void handleMoveEastButtonAction(ActionEvent event) { 
    System.out.println("Move East"); 
} 

@FXML 
private Button moveWestButton; 

@FXML 
private void handleMoveWestButtonAction(ActionEvent event) { 
    System.out.println("Move West"); 
} 


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

} 

Я не думаю, что мне нужно, чтобы показать класс пользователя.

ответ

0

Вы можете предоставить экземпляр пользователя контроллеру для его управления. Для этого сначала

1) получить экземпляр контроллера uiFXMLController как в Accessing FXML controller class.
2) поля uiFXMLController.setUser(user);
3) пользователь Обновления

@FXML 
private void handleMoveEastButtonAction(ActionEvent event) { 
    System.out.println("Move East"); 
    user.setLocationX(user.getLocationX() + 10); 
} 
+0

получили это спасибо !! –

Смежные вопросы