2016-11-06 36 views
1

私はちょうどjavaFXを開始しました。私はいくつかのオプションでButtonMenuを作っています。私はメニューから何を選択するのかを知りたい。ここ メニューボタンから選択項目を取得する方法javaFX?

は、これまでの私のコードです - >

コントローラクラス>

@FXML 
private JFXTextField locF; 
private File file; 
private Set<String> extensions; 
@FXML 
private MenuButton format; 


public void openFileBrowser(ActionEvent event){ 


    DirectoryChooser chooser = new DirectoryChooser(); 
    chooser.setTitle("JavaFX Projects"); 
    chooser.setInitialDirectory(new File("c:/")); 
    File selectedDirectory = chooser.showDialog(Main.stage); 
    locF.setText(selectedDirectory+""); 
    extensions=getFileTypes(selectedDirectory.listFiles());//just gets all different types format present in the folder and later add it to menu 
    Iterator<String> it=extensions.iterator(); 
    while (it.hasNext()){ 
    format.getItems().addAll(new MenuItem(it.next())); 
    } 
} 

private Set<String> getFileTypes(File[] list){ 
    Set<String> ext=new HashSet<>(); 
    for (File i: 
     list) { 

     if (i.isFile()){ 


       ext.add(i.getName().substring(i.getName().lastIndexOf("."))); 



     } 

    } 

    return ext; 
} 

}

FXML - >

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

 
<?import com.jfoenix.controls.JFXButton?> 
 
<?import com.jfoenix.controls.JFXTextField?> 
 
<?import javafx.scene.control.Label?> 
 
<?import javafx.scene.control.MenuButton?> 
 
<?import javafx.scene.control.MenuItem?> 
 
<?import javafx.scene.layout.BorderPane?> 
 
<?import javafx.scene.layout.ColumnConstraints?> 
 
<?import javafx.scene.layout.GridPane?> 
 
<?import javafx.scene.layout.RowConstraints?> 
 

 
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.102" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
 
    <top> 
 
     <GridPane BorderPane.alignment="CENTER"> 
 
     <columnConstraints> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="295.0" minWidth="10.0" prefWidth="57.0" /> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="295.0" minWidth="10.0" prefWidth="93.0" /> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="564.0" minWidth="10.0" prefWidth="311.0" /> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="575.0" minWidth="0.0" prefWidth="77.0" /> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="575.0" minWidth="10.0" prefWidth="69.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> 
 
     <children> 
 
      <JFXTextField fx:id="locF" focusColor="#47c64d" unFocusColor="#821dda" GridPane.columnIndex="2" GridPane.rowIndex="1" /> 
 
      <JFXButton fx:id="browse" mnemonicParsing="false" onAction="#openFileBrowser" prefHeight="78.0" prefWidth="123.0" ripplerFill="#2de823" text="Browse" GridPane.columnIndex="3" GridPane.rowIndex="1" /> 
 
      <Label fx:id="locL" prefHeight="48.0" prefWidth="143.0" text="Enter Location" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 
 
     </children> 
 
     </GridPane> 
 
    </top> 
 
    <right> 
 
     <GridPane BorderPane.alignment="CENTER"> 
 
     <columnConstraints> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="95.0" minWidth="10.0" prefWidth="61.0" /> 
 
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="139.0" minWidth="10.0" prefWidth="139.0" /> 
 
     </columnConstraints> 
 
     <rowConstraints> 
 
      <RowConstraints maxHeight="98.0" minHeight="0.0" prefHeight="17.0" vgrow="SOMETIMES" /> 
 
      <RowConstraints maxHeight="227.0" minHeight="10.0" prefHeight="227.0" vgrow="SOMETIMES" /> 
 
      <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
 
     </rowConstraints> 
 
     <children> 
 
      <MenuButton fx:id="format" mnemonicParsing="false" prefHeight="29.0" prefWidth="109.0" text="Format" GridPane.columnIndex="1"> 
 

 
      </MenuButton> 
 
     </children> 
 
     </GridPane> 
 
    </right> 
 
</BorderPane>

私はオラクルに行きましたが、情報が見つかりませんでした。どんな助けもありがとうございます。

+0

私はあなたのコードを実行しました。 「フォーマット」ドロップダウンメニューで選択するオプションはありません。 – Sedrick

+0

@SedrickJeffersonメニューで選択を追加する方法は? – thvardhan

+0

直面している問題に取り組むだけの非常に簡単な例を探してください。 – Sedrick

答えて

1

私ができるよう:

メニューボタンコントロールは、ボタンのように見えるし、メニューのように動作します。 クリックするなどして有効にすると、 オプションのリストがポップアップメニューの形式で表示されます。メニュー のオプションリストはObservableListに保持され、参照は で、getItems()メソッドによって返されます。 メニュー オプションが選択されているときにコマンドを実行するには、 MenuItemsにActionEventハンドラを追加する必要があります。

だから、...のMenuItemが選択されて検出する機構で

を構築していないあなたがグループでRadioMenuItemまたはCheckMenuItemを使用している場合を除き、それはあなたが得ることができ、その場合、他のstory..Inですこれらのボタンをグループ化するために使用しているToggleGroupから選択した項目を選択します。


解決策:MenuButtonObservableListに追加した各MenuItemに対して

actionListenerを追加します。

while (it.hasNext()){ 
    MenuItem item = new MenuItem(it.next()); 
    item.setOnAction(a->{ //lambda expression 
     //..code logic here for each extension 
    }); 
    format.getItems().add(item); 
} 
0

Google検索を実行してこの解決策を見つけました。

Override 
public void start(Stage stage) { 
    Group root = new Group(); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 


    ChoiceBox<String> cb = new ChoiceBox(FXCollections.observableArrayList("item1", "item2", "item3")); 
    cb.getSelectionModel().selectedIndexProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> { 
     String selectedItem = cb.getValue(); 
     Alert alert = new Alert(AlertType.INFORMATION); 
     alert.setTitle("Example"); 
     alert.setContentText("You clicked " + cb.getItems().get((Integer)newValue)); 
     alert.showAndWait(); 
    }); 


    root.getChildren().add(cb); 
    stage.show(); 
} 

あなたが望む結果が得られるまで、これを使いこなすことができます。

関連する問題