javafx:如何处理项目(文本字段,标签等)?

时间:2016-07-14 21:09:33

标签: java javafx fxml

我使用场景构建器生成一个布局,导出导入到TextPad的fxml后,布局被sucessefuly导入但是我无法通过id处理项目(如果这就是它的工作原理)。我的问题是如何处理我添加的项目。

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 个答案:

答案 0 :(得分:0)

正如@James_D所说,你最想要的是:

  1. 您希望访问的FXMl中元素的引用。
  2. FXML的控制器类。
  3. 示例:

    zhelpers.h

    检查oracle示例here并注意netbeans IDE生成如上所示的默认控制器类,但是当在场景构建器中添加新元素时,您应该将每个@FXML注释添加到您希望的变量中访问和场景构建器/ netbeans具有同步功能,以查看从代码中引用的元素。

      

    与Controller源代码同步NetBeans IDE的Make   控制器功能允许您同步修改   在当前在Scene Builder中打开的FXML文件中生成   NetBeans IDE中打开的控制器源代码。为了说明这一点   功能,请执行以下操作:

         

    在Scene Builder中,将Button控件从“库”面板拖到   控制面板。在“代码”面板中,为新值指定新值   button的fx:id字段和onAction方法的新方法名称。   在主菜单中选择文件,然后单击保存。在NetBeans IDE 7.4或   稍后,右键单击您刚才的FXML文件的项目节点   编辑并从上下文菜单中选择“编辑”。从主菜单中,   选择Source,然后选择Make Controller。 @FXML私有变量和   您刚刚在Scene Builder中添加的按钮的新onAction方法   在控制器源文件中创建。使用Make Controller   命令,如果您删除控制面板中的元素或更新   fx:id值或Scene Builder中的方法名称。

    Source

    另请注意,您应该在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
        }
    
    }
    

    因为必须在FXML中的某处指定控制器类。然后在您的示例代码中调用您的控制器,如fxlayout.java。这也可以使用场景构建器进行设置/修改:

    enter image description here