Я пишу программу для хранения информации о клиентах для бизнеса.
Я создал функцию-кнопку для добавления нового клиента, и она отлично работает.
Однако я включаю TabPane в верхней части моего основного JavaFX BorderPane, и у меня возникают проблемы с автоматическим обновлением вкладок после записи этого файла и для этого он отображает недавно добавленного клиента в список вкладок.
Если я закрываю программу и снова откройте, чтобы показать всю информацию, но я хочу обновить вкладки сразу после нажатия кнопки отправки.
Я попытался использовать TabPane в приложении расширяет класс приложения, но затем я не могу получить к нему доступ из мой класс меню. Переопределение метода start при создании подкласса класса Application - большая головная боль для JavaFX.
Затем я попытался переместить TabPane в собственный файл класса, и я понял, что понятия не имею, как заставить обновления вкладок обновляться. из основного приложения расширяется класс приложения ...
Как я могу это исправить?
Вот мой основной класс приложения:
public class App extends Application {
//User screen size
private Rectangle2D screenSize = Screen.getPrimary().getBounds();
//Main window and sub windows
private BorderPane mainWindow = new BorderPane();
private GridPane buttonTabPane = new GridPane();
private Menus menu = new Menus();
//Button bar
private ButtonBar buttonBar = new ButtonBar();
private Button newClient = new Button("New Client");
private Button editClient = new Button("Edit Client");
private Button findClient = new Button("Find Client");
//Client tabs
private Tabs clientTabs = new Tabs();
private TabPane clientTabPane = clientTabs.getTabPane();
//Padding
private Insets pad = new Insets(10);
@Override
public void start(Stage stage) {
stage.setTitle("Cybernetic Tax Automation");
//Button bar
buttonBar.getButtons().addAll(newClient,editClient,findClient);
buttonBar.setPadding(pad);
//Button actions
newClient.setOnAction(e -> {
mainWindow.setCenter(menu.newClient());
});
//Combo pane for button bar and tabs
buttonTabPane.setConstraints(buttonBar,0,0);
buttonTabPane.setConstraints(clientTabs.getTabPane(),0,1);
buttonTabPane.getChildren().addAll(buttonBar,clientTabs.getTabPane());
//Find currently selected client tab
clientTabs.getTabPane().getSelectionModel().selectedItemProperty().addListener(e -> {
System.out.println(clientTabs.getTabPane().getSelectionModel().getSelectedItem().getText());
});
//Main window
mainWindow.setTop(buttonTabPane);
Scene scene = new Scene(mainWindow,screenSize.getMaxX(),screenSize.getMaxY());
stage.setScene(scene);
stage.show();
}
}
Вот мой класс Menu, который указывает на окно новой клиентской кнопки:
public class Menus {
//Menus
private GridPane gridPane = new GridPane();
//System specific home
private String home = System.getProperty("user.home");
//File paths
private String clientsFilePath = "/Desktop/Clients.txt";
//Files
private Files fileIO = new Files();
private File clientsFile = new File(home + clientsFilePath);
//Padding and gaps
private Insets pad = new Insets(10,10,10,10);
private int gap = 10;
public GridPane newClient() {
gridPane.setPadding(pad);
gridPane.setHgap(gap);
gridPane.setVgap(gap);
Label firstName = new Label("First Name:");
TextField firstNameField = new TextField();
gridPane.setConstraints(firstName,0,0);
gridPane.setConstraints(firstNameField,1,0);
Label middleName = new Label("Middle Name:");
TextField middleNameField = new TextField();
gridPane.setConstraints(middleName,0,1);
gridPane.setConstraints(middleNameField,1,1);
Label lastName = new Label("Last Name:");
TextField lastNameField = new TextField();
gridPane.setConstraints(lastName,0,2);
gridPane.setConstraints(lastNameField,1,2);
Button submit = new Button("Submit");
gridPane.setConstraints(submit,1,3);
submit.setOnAction(e -> {
String fullName = "";
for(Node node : gridPane.getChildren()) {
if(node instanceof TextField) {
String firstLetter = ((TextField)node).getText().substring(0,1).toUpperCase();
String upperName = firstLetter + ((TextField)node).getText().substring(1);
fullName += upperName + " ";
}
}
fullName += "\n";
fileIO.writeFile(clientsFile,fullName);
firstNameField.clear();
middleNameField.clear();
lastNameField.clear();
});
gridPane.getChildren().addAll(
firstName,
firstNameField,
middleName,
middleNameField,
lastName,
lastNameField,
submit
);
return gridPane;
}
}
Вот мой недавно созданный класс Tabs:
public class Tabs {
//System specific home
private String home = System.getProperty("user.home");
//File paths
private String clientsFilePath = "/Desktop/Clients.txt";
//Files
private File clientsFile = new File(home + clientsFilePath);
//Objects
private TabPane tabPane = new TabPane();
private Files fileIO = new Files();
public Tabs() {
tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
tabPane.setTabMinWidth(120);
updateTabs();
}
public TabPane getTabPane() {
return tabPane;
}
public void updateTabs() {
ArrayList<String> clientList = fileIO.readFile(clientsFile);
tabPane.getTabs().removeAll();
for(int i = 0; i < clientList.size(); i++) {
Tab client = new Tab(clientList.get(i));
tabPane.getTabs().add(client);
}
}
}