2016-07-14 17 views
0

レイアウトを生成するためにシーンビルダを使用しましたが、TextPadにインポートされたfxmlをエクスポートした後、レイアウトは完全にインポートされましたが、idで項目を処理できませんでした。私の質問は、どのように私が追加したアイテムを処理するかです。javafx:アイテム(テキストフィールド、ラベルなど)を扱う方法は?

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 
import javafx.fxml.FXMLLoader; 

public class test2fx extends Application{ 


     public static void main(String[] args){ 

      Application.launch(args); 
     } 
     public void init(){ 
     } 

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

     Parent root = FXMLLoader.load(getClass().getResource("fxlayout.fxml")); 
     Scene scene = new Scene(root, 300, 275); 
     stage.setTitle("FXML Welcome"); 
     stage.setScene(scene); 

     stage.show(); 

     } 
     public void stop(){ 
      System.exit(0); 
    } 

FXMLファイルの内容:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.layout.Pane?> 
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="284.0" prefWidth="314.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <Button layoutX="31.0" layoutY="252.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="50.0" text="Jogar" /> 
     <Button layoutX="124.0" layoutY="252.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="50.0" text="Novo" /> 
     <Button layoutX="219.0" layoutY="252.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="50.0" text="Sair" /> 
     <TextField id="tf1" disable="true" layoutX="150.0" layoutY="60.0" /> 
     <TextField id="tf1" disable="true" layoutX="150.0" layoutY="100.0" /> 
     <TextField id="tf3" layoutX="150.0" layoutY="140.0" /> 
     <TextField id="tf4" disable="true" layoutX="150.0" layoutY="180.0" /> 
     <Label id="lb1" layoutX="38.0" layoutY="60.0" prefHeight="22.0" prefWidth="59.0" text="Inicio" /> 
     <Label id="lb2" layoutX="38.0" layoutY="100.0" prefHeight="22.0" prefWidth="59.0" text="Fim" /> 
     <Label id="lb3" layoutX="38.0" layoutY="139.0" prefHeight="22.0" prefWidth="59.0" text="Palpite" /> 
     <Label id="lb4" layoutX="38.0" layoutY="180.0" prefHeight="22.0" prefWidth="59.0" text="Inicio" /> 
    </children> 
</Pane> 
+1

使用 'FX:id'と[Controllerクラス](http://docs.oracle.com/javase/8/javafx/api/これはあまりにもシーンビルダを使用して変更/設定することができますjavafx/fxml/doc-files/introduction_to_fxmlにあります。html#controllers) –

+0

fxmlにidを追加し、SceneBuilderを使用してメニューバーを表示し、(View)メニューをクリックして(View Sample Controller)コードをコピーし、それをJavaコントローラクラスにコピーします。 fx:idを使用します。 – GOXR3PLUS

答えて

0

@James_Dは、あなたが最も可能性の高いたい言ったように:

  1. アクセスしたいあなたのFXMLの要素への参照。
  2. FXMLのコントローラクラス。

例:

/* 
* Dean2191 Stackoverflow example 
*/ 
package javafxapplication6; 

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

/** 
* 
* @author dean2191 
*/ 
public class FXMLDocumentController implements Initializable { 

    @FXML 
    private Label label; 

    @FXML 
    private TextField tf1; // value will be injected by the FXMLLoader 

    @FXML 
    private void handleButtonAction(ActionEvent event) { 
     System.out.println("You clicked me!"); 
     label.setText("Hello World!"); 
    } 

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

} 

新しい要素がシーンビルダーに追加されたときに、それぞれを追加する必要がオラクルの例を確認しhereし、また上記のようにNetBeans IDEは、デフォルトのコントローラクラスを作成することに注意してください@アクセスする変数へのFXMLアノテーションとシーンビルダ/ネットビーンには、コードから参照される要素を表示する同期機能があります。コントローラのソースコードザ・NetBeans IDEでの コントローラ機能を作ると同期

はあなたが現在のシーンBuilderで開かれ、 コントローラのソースコードは、NetBeans IDEで開かれているFXMLファイルで作成 の変更を同期させることができます。

Scene Builderで、Buttonコントロールをライブラリパネルから コントロールパネルにドラッグします。コードパネルで、新しい ボタンのfx:idフィールドに新しい値を割り当て、onActionメソッドに新しいメソッド名を割り当てます。 メインメニューの[ファイル]を選択し、[保存]をクリックします。 NetBeans IDE 7.4または で、 という編集済みのFXMLファイルのプロジェクトノードを右クリックし、コンテキストメニューから[編集]を選択します。メインメニューから、 ソースを選択し、コントローラを作成を選択します。 @FXMLプライベート変数と シーンビルダで追加したボタンの新しいonActionメソッド がコントローラのソースファイルに作成されます。コントロールパネルで要素を削除するか、 fx:id値またはScene Builderのメソッド名を更新する場合は、コントローラを作成する コマンドを使用します。

Source

はまた、あなたは、この行のためにあなたのFXMLにチェックする必要があります注意してください。

あなたのコントローラクラスは、FXMLのどこかに指定しなければならないとして
fx:controller="yourNamespace.fxlayout" 

。あなたのコントローラは、サンプルコードでfxlayout.javaのようなものになります。

enter image description here

関連する問題