2016-07-14 220 views
0

我使用場景生成器來生成佈局,導出導入到TextPad中的fxml後,佈局被sucessefuly導入,但我無法處理項目的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'和[控制器類(http://docs.oracle.com/javase/8/javafx/api/這可以使用場景助洗劑也可以設置/修改JavaFX的/ FXML/DOC-文件/ 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 
    } 

} 

查詢Oracle實例here和還注意到,在NetBeans IDE產生如圖所示,當一個新的元件在現場構建器添加應添加的每個然而上述缺省控制器類@將FXML註釋添加到您希望訪問的變量中,並且場景構建器/ netbeans具有同步功能,以查看代碼中引用哪些元素。

同步與控制器源代碼使用NetBeans IDE的製作 控制器功能,可以同步你 使當前在場景生成器打開和 在NetBeans IDE中打開控制器的源代碼FXML文件的修改。要說明此功能,請執行以下操作:

在場景構建器中,將一個按鈕控件從庫面板拖到 控制面板。在「代碼」面板中,爲新的 按鈕的fx:id字段和onAction方法的新方法名稱分配一個新值。 在主菜單中選擇File,然後選擇Save。在稍後的NetBeans IDE 7.4或 中,右鍵單擊僅編輯 的FXML文件的項目節點,然後從上下文菜單中選擇編輯。從主菜單 中選擇Source,然後製作控制器。 @FXML私有變量和 在控制器源文件中創建了剛剛在Scene Builder 中添加的按鈕的新onAction方法。如果在控制面板中刪除元素或在場景構建器中更新fx:id值或方法名稱,請使用製作控制器 命令。

Source

另外請注意,你應該在你的FXML檢查這一行:

fx:controller="yourNamespace.fxlayout" 

當你的控制器類必須在某處FXML規定。您的控制器將在您的示例代碼中被稱爲fxlayout.java。

enter image description here