2016-07-14 224 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