我正在学习JavaFX,但我不能让ListView加载它的项目

时间:2015-09-27 05:53:32

标签: listview model-view-controller javafx

我正在尝试用JavaFX构建一个应用程序,当我加载一个视图的控制器时我遇到了一些麻烦,除了我试图遵循mvc模式,所以这里是我的问题

package mark.findme.address.view;


import javafx.collections.*;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import mark.findme.address.MainApp;

public class AppMenuViewController
{
    @FXML
    private ListView<String> lista;

   private final static ObservableList<String> items=FXCollections.observableArrayList ("Clientes","Gestión sección", "Estadísticas","Faturación","Inventario","Productos","Proveedores");

// Reference to the main application.
private MainApp mainApp;

@FXML
private void initialize()
{
    lista = new ListView<String>();
    lista.setItems(items);
    System.out.println("Cargué las listas");
}
public void setMainApp(MainApp nMainApp)
{
    mainApp = nMainApp;


}
}

当我加载视图时,我无法使其工作。它加载了它的项目。

这是我加载此控制器的地方

package mark.findme.address;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import mark.findme.address.view.AppMenuViewController;

public class MainApp extends Application
{
private Stage escenarioPrincipal;
private BorderPane rootLayout;
/*
 * Inicio de la aplicacion
 */
@Override
public void start(Stage nEscenarioPrincipal)
{
    escenarioPrincipal = nEscenarioPrincipal;
    escenarioPrincipal.setTitle("Find Me");



    initRootLayout();
    loadAppMenu();
}
public void initRootLayout()
{
    try {
        // Carga el archivo del diseño de la raiz.
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
        rootLayout = (BorderPane) loader.load();

        // Muestra la escena en el diseño de la raiz.
        // La escenario se le asigna la escena que debe mostrar.
        Scene scene = new Scene(rootLayout);
        escenarioPrincipal.setScene(scene);
        escenarioPrincipal.show();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}
public void loadAppMenu()
{
    try
    {
        // Carga AppMenuView
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/AppMenuView.fxml"));
        AnchorPane appMenuView = (AnchorPane) loader.load();

        // Asigna al centro de la aplicacion appMenuView
        rootLayout.setCenter(appMenuView);

        // Dar al controlador acceso al main de la aplicacion
        AppMenuViewController controller = loader.getController();
        controller.setMainApp(this);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public Stage getEscenarioPrincipal()
{
    return escenarioPrincipal;
}

public void setEscenarioPrincipal(Stage nEscenarioPrincipal)
{
    escenarioPrincipal = nEscenarioPrincipal;
}
public static void main(String[] args)
{
    launch(args);
}

}

我已经使用sceneBuilder告诉我的view这是controller,当我运行时,它会显示空的listview

1 个答案:

答案 0 :(得分:1)

问题

您的代码中存在一个问题:您在控制器中创建 ListView

解决方案

如果你创建一个FXML,附加一个控制器并用@FXML注释一些变量,如果FXML加载没有错误,那么一切都已完成。所有实例都在那里。

所以,通常你只需从控制器中删除这一行:

lista = new ListView<String>();