我正在尝试用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
答案 0 :(得分:1)
您的代码中存在一个问题:您在控制器中创建新 ListView
如果你创建一个FXML,附加一个控制器并用@FXML注释一些变量,如果FXML加载没有错误,那么一切都已完成。所有实例都在那里。
所以,通常你只需从控制器中删除这一行:
lista = new ListView<String>();