2017-02-15 4 views
0

は、私は私の.fxmlJavaFXでメソッドをコンボボックスにバインドする方法は?

<ComboBox fx:id="comboShapes" prefWidth="150.0" value="Random"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="Random" /> 
      <String fx:value="Small Exploder" /> 
      <String fx:value="Gospler Glider Run" /> 
      <String fx:id="comboGlider" fx:value="Glider" /> 
     </FXCollections> 
    </items> 
</ComboBox> 

に、この単純なコンボボックスを持っていると私はコントローラで異なるchoicebox文字列にセットする方法をバインドすることができますどのように思ったんだけど?

+0

実行した操作に基づいてchoiceboxを設定しようとしていますか? – Sedrick

+0

@SedrickJefferson私は、コンボボックスのSmall Exploder文字列にメソッドinitSmallExploder()をバインドしようとしています。 – r4tchet

答えて

4
  1. コントローラでは、コンボボックスのアクションハンドラをonAction(ActionEvent event)と定義します。
  2. コントローラのアクションハンドラにfxmlをonAction="#choiceMade"経由でリンクします(choiceMadeは、アクションハンドラメソッドで選択した任意の名前です)。
  3. アクションハンドラで、コンボボックスの値を切り替えて、選択した値に対して適切なメソッドハンドラを呼び出します。

pic

アプリケーション/ ComboAction.fxml

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

<?import java.lang.String?> 
<?import javafx.collections.FXCollections?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.ComboBox?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.VBox?> 

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="104.0" prefWidth="226.0" spacing="10.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ComboActionController"> 
    <children> 
     <Label fx:id="choiceLabel" /> 
     <ComboBox fx:id="comboShapes" onAction="#choiceMade" prefWidth="150.0" value="Random"> 
     <items> 
      <FXCollections fx:factory="observableArrayList"> 
       <String fx:value="Random" /> 
       <String fx:value="Small Exploder" /> 
       <String fx:value="Gospler Glider Run" /> 
       <String fx:value="Glider" /> 
      </FXCollections> 
     </items> 
     </ComboBox> 
    </children> 
    <padding> 
     <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> 
    </padding> 
</VBox> 

アプリケーション/ ComboActionApp.java

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

public class ComboActionApp extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("ComboAction.fxml")); 
     Parent root = loader.load(); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
    } 

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

アプリケーション/ ComboActionControll er.java

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.Label; 

public class ComboActionController { 

    @FXML 
    private ComboBox<String> comboShapes; 

    @FXML 
    private Label choiceLabel; 

    @FXML 
    void choiceMade(ActionEvent event) { 
     String choice = comboShapes.getValue(); 

     choiceLabel.setText(
       "Chosen: " + choice 
     ); 

     switch (choice) { 
      case "Random": 
       randomChosen(); 
       break; 

      case "Small Exploder": 
       smallExploderChosen(); 
       break; 

      case "Gospler Glider Run": 
       gliderChosen(); 
       break; 
     } 
    } 

    private void gliderChosen() { 
     // todo implement action handler. 
    } 

    private void smallExploderChosen() { 
     // todo implement action handler. 
    } 

    private void randomChosen() { 
     // todo implement action handler. 
    } 

} 
+0

すばらしい、ありがとう!! – r4tchet

関連する問題