Невозможно импортировать класс javafx fxml - PullRequest
0 голосов
/ 22 сентября 2018

Используя шаблон проекта FXML в netbeans, у меня возникла проблема с определением контроллера FX в моем файле FXML.

  • Основной класс, документ fxml и контроллер fxml находятся в одном пакете: «login».
  • Я импортирую контроллер в документ fxml, используя его полное имя.
  • Ошибка в строке импорта: «Класс login.MyController не существует».

Документ FXML

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Polygon?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<?import login.MyController?>

<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="login.MyController">
  <children>
    <AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" style="-fx-background-color: #091D34;" VBox.vgrow="ALWAYS">
      <children>
        <Polygon fill="#000000b1" layoutX="363.0" layoutY="103.0" points="-50.0, 40.0, 50.0, 40.0, 50.0, -73.0" stroke="BLACK" strokeType="INSIDE" style="-fx-fill: #133863;" />
        <ButtonBar layoutX="233.0" layoutY="256.0" prefHeight="40.0" prefWidth="161.0">
          <buttons>
              <Button layoutX="135.0" layoutY="18.0" minWidth="49.0" mnemonicParsing="false" prefHeight="25.0" text="Login" onAction="#doLogin" />
              <Button layoutX="165.0" layoutY="18.0" mnemonicParsing="false" text="About" />
          </buttons>
        </ButtonBar>
        <PasswordField layoutX="186.0" layoutY="216.0" prefHeight="25.0" prefWidth="273.0" promptText="Password" onKeyPressed="#onEnter" />
        <TextField layoutX="186.0" layoutY="175.0" prefHeight="25.0" prefWidth="273.0" promptText="Username" />
        <Text layoutX="253.0" layoutY="76.0" strokeType="OUTSIDE" strokeWidth="0.0" style="-fx-fill: #236AB9;" text="Anatomy Law" textAlignment="CENTER" wrappingWidth="120.58984375">
           <font>
              <Font name="Aparajita" size="22.0" />
           </font>
        </Text>
  </children>
</AnchorPane>

Контроллер

package login;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;

public class MyController implements Initializable {


@FXML
public void doLogin(Event e){
    System.out.println("do login called");
}

@FXML
public void onEnter(KeyEvent ke){
    if(ke.getCode() == KeyCode.ENTER){
        System.out.println("on enter called");
        login();
    }
}

private void login(){

}

@Override
public void initialize(URL location, ResourceBundle resources) {

}

}

Main

package login;

import java.net.URL;
import javafx.application.Application;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage stage) throws Exception {    
    FXMLLoader fxmlLoader = new FXMLLoader();
    MyController fxmlController = new MyController();

    fxmlLoader.setController(fxmlController);
    fxmlLoader.setLocation(new URL("C:/.../login/Login.fxml"));

    VBox vbox = fxmlLoader.<VBox>load();
    Scene scene = new Scene(vbox);

    stage.setScene(scene);
    stage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

Примечание Я недавно попробовал следующую строку в моем документе FXML:

<?import login.*?> 

Какиев результате "логин пакета не существует".

и

<?import MyController?>

, что привело к классу не существует.

Итак, я предполагаю, что это какая-то ошибка пути сборки, но все они в одном пакете.Я даже добавил пакет, в котором они находятся, к дополнительным исходным пакетам, чтобы собрать их, чтобы убедиться, но это ничего не решило.Схема моего проекта следующая:

Project Name 
    Source Packages 
        login
            Login.fxml
            MyController.java
            Main.java 

Я просмотрел другие публикации с вопросами по этой проблеме, но, похоже, ни у кого не было этой конкретной проблемы.Однако, если я пропустил чей-то пост с идентичным ответом, я с удовольствием воспользуюсь этой ссылкой.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Убедитесь, что документ, который вы редактируете, определенно является документом в вашем пакете.Так или иначе, в моем случае я фактически редактировал документ вне пакета с таким же точным именем.Вот почему он не смог найти класс контроллера, когда я попытался его импортировать.

0 голосов
/ 23 сентября 2018

Вам не нужно его импортировать.Вы должны указать полное имя вашего класса контроллера, хотя.

В вашем случае это login.MyController, поэтому fx:controller="login.MyController".

Хотя у вас могут быть другие проблемы, потому что я невозникли проблемы, когда я поместил этот оператор импорта в формате FXML.Это просто не нужно.

...