import java.io.IOException;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.fxml.FXMLLoader;
import javafx.stage.Modality;
import javafx.stage.Stage;
import vp.dict.model.Data;
import vp.dict.view.ContentController;
import vp.dict.view.EditDialogController;
import vp.dict.view.RootController;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
public class MainApp extends Application {
private Stage window;
private BorderPane rootLayout;
private ObservableList<Data> dataList = FXCollections.observableArrayList();
public MainApp(){
dataList.add(new Data("Hi", "Haj", "Ahoj, cau"));
dataList.add(new Data("Hello", "Helou", "Ahoj"));
dataList.add(new Data("New", "Nju", "Novy"));
}
public ObservableList<Data> getDataList(){
return dataList;
}
public void start(Stage window) throws IOException {
this.window = window;
this.window.setTitle("EN/CZ Dictionary 2017");
initRootLayout();
initContent();
}
public void initRootLayout() throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../view/rootLayout.fxml"));
rootLayout = (BorderPane)loader.load();
Scene scene = new Scene(rootLayout);
window.setScene(scene);
RootController controller = loader.getController();
controller.setMainApp(this);
window.show();
}
public void initContent() throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../view/contentLayout.fxml"));
AnchorPane ap = (AnchorPane)loader.load();
rootLayout.setCenter(ap);
ContentController controller = loader.getController();
controller.setMainApp(this);
}
public boolean showEditWindow(Data data) throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../view/editDialogLayout.fxml"));
AnchorPane ap = (AnchorPane)loader.load();
Stage editWindow = new Stage();
editWindow.setTitle("Add a New Word");
editWindow.initModality(Modality.WINDOW_MODAL);
editWindow.initOwner(window);
Scene scene = new Scene(ap);
editWindow.setScene(scene);
EditDialogController controller = loader.getController();
controller.setStage(editWindow);
controller.setData(data);
editWindow.showAndWait();
return controller.isOkClicked();
}
public Stage getWindow(){
return window;
}
public static void main(String[] args) {
launch(args);
}
}
package vp.dict.view;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import vp.dict.main.MainApp;
import vp.dict.model.Data;
public class ContentController {
@FXML
private TableView<Data> dataTable;
@FXML
private TableColumn<Data, String> englishColumn;
@FXML
private TableColumn<Data, String> pronunciationColumn;
@FXML
private TableColumn<Data, String> meaningColumn;
private MainApp mainApp;
public ContentController(){
}
@FXML
public void initialize(){
englishColumn.setCellValueFactory(CellData -> CellData.getValue().englishProperty());
pronunciationColumn.setCellValueFactory(CellData -> CellData.getValue().pronunciationProperty());
meaningColumn.setCellValueFactory(CellData -> CellData.getValue().meaningProperty());
}
public void setMainApp(MainApp mainApp){
this.mainApp = mainApp;
dataTable.setItems(mainApp.getDataList());
}
public TableView<Data> geTableView(){
return dataTable;
}
}
RootController类是我需要进行工作的地方。在方法private void handleDelete()中,您可以在注释中看到一些代码,这是一个工作代码,但我无法找到从ContentController类加载数据的方法,这是上面的代码垃圾。
package vp.dict.view;
import java.io.IOException;
import javax.security.auth.login.Configuration;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.TableView;
import vp.dict.main.MainApp;
import vp.dict.model.Data;
public class RootController {
private MainApp mainApp;
public void initialize(){
}
public RootController(){
}
public void setMainApp(MainApp mainApp){
this.mainApp = mainApp;
}
@FXML
private void addClicked() throws IOException{
Data tempData = new Data();
boolean okClicked = mainApp.showEditWindow(tempData);
if(okClicked){
mainApp.getDataList().add(tempData);
}
}
@FXML
private void handleDelete() throws IOException{
/* int selectedIndex = contentTable.geTableView().getSelectionModel().getSelectedIndex();
if (selectedIndex >= 0) {
contentTable.geTableView().getItems().remove(selectedIndex);
} else {
// Nothing selected.
Alert alert = new Alert(AlertType.WARNING);
alert.initOwner(mainApp.getWindow());
alert.setTitle("No Selection");
alert.setHeaderText("No Person Selected");
alert.setContentText("Please select a person in the table.");
alert.showAndWait();
}*/
}
}
我将感谢任何关于如何使它工作的想法。
首先,您无法从rootcontroller
访问contentcontroller
,因为这两者之间没有任何引用。其次,让contentcontroller
来处理它可能更简单,而rootcontroller
只做通知。
好吧,我把执行命令弄乱了一点。这才是正确的。
MainApp:
private void RootController rootController;
...
// In initRoot()
this.rootController = loader.getController();
// Replace the below line in initContent():
//ContentController controller = loader.getController();
//controller.setMainApp(this);
ContentController controller = loader.getController();
controller.setMainApp(this);
this.rootController.setContentController(controller);
private ContentController contentController;
public void setContentController(ContentController content)
{
this.contentController = content;
}
...
@FXML
private void handleDelete() throws IOException
{
if (this.contentController != null)
this.contentController.handleDelete();
}
public void handleDelete()
{
// Whatever delete logic you originally had here
}
问题内容: 我有一JFrame堂课,它是在Netbeans的设计部分制作的。我正在尝试创建一个登录按钮,该按钮将关闭当前框架并打开另一个框架,无论如何我可以这样做吗? 我努力了: 但我希望它在设计部分中可编辑! 问题答案: 双击NETBEANS中的“登录”按钮,或在Click事件上添加事件监听器(ActionListener)
我希望有几个JavaFX按钮,用文本更新应用程序中的一个标签。出于测试目的,它只是按钮文本。 我一开始做的很好,看起来是这样的: 然后,我决定用CSS对我的按钮进行样式化,因为我想用不同的方式对几组按钮进行样式化,所以我以这种方式对JavaFX Button类进行了子类化: 这仍然有效。但是现在我希望我的事件处理程序被移动到Button子类(以避免将完全相同的代码复制粘贴到我的每个按钮中)。我做的
我有我的UIController类和一个按钮方法类。按钮方法类包含按钮操作的所有代码。我需要能够使用按钮方法类中控制器类中的按钮。例如,我在控制器类中定义了这些 例如,单击按钮时,按钮锁定有一个动作事件 理想情况下,我希望按钮方法可以做到这一点: 出于各种原因,我不能将代码放在动作事件中,而将按钮对象放在参数中会让我的操作变得太混乱。那么如何将FXML对象放入button类中呢?
我有两个类和一个文本文件数据库,第一个类中的,我们将其称为自动设置为数据库中的数字。现在,在中,我有一个小的和一个文本字段,当然还有一个按钮,我在文本字段中的值会覆盖数据库中的值,但问题出在这里。第一个类中的标签在运行时不会更新,但如果我重新启动它,它会显示我想要的值。 如何在程序运行时更新它?我尝试在另一个类的中更改标签,但它每次都给我一个。 我怎么解决这个? 我希望这让我更容易理解我的问题。这
在我的项目中,我有3个文件: FXMLController.java这是一个JavaFX文件 FXML。这是另一个JavaFX文件 JavaApplication3.java这个文件只包含我的主要方法: 我想从我的主方法启动我的FXMLController类来运行这个程序。怎么做呢?我写的代码不工作可能是因为我有这个错误“没有找到合适的方法启动”。
本文向大家介绍javafx 创建一个按钮,包括了javafx 创建一个按钮的使用技巧和注意事项,需要的朋友参考一下 示例 创建aButton很简单: 这将创建一个新的Button,内部没有任何文本或图形。 如果要Button使用文本创建一个,只需使用带有Stringas参数的构造函数(用于设置textProperty的Button): 如果您想创建一个Button内部带有图形或其他图形的Node,