相关文件:(对任何格式化道歉,多次尝试使其工作)
如果文件不足,则存储库位于:https://github.com/TheeNinja/StockLookupTool
stock_lookup_tool_main.fxml
<BorderPane fx:id="borderPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="me.theeninja.stocklookuptool.gui.StockLookupToolApplicationController">
<top>
...
</top>
<left />
<center />
</BorderPane>
stock_information_center.fxml
<GridPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="me.theeninja.stocklookuptool.gui.selection.StockSearchSelectionController"
prefHeight="400.0" prefWidth="600.0"
fx:id="stockInformationCenter">
</GridPane>
favorite_stocks_sidebar.fxml
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="me.theeninja.stocklookuptool.gui.selection.StockSearchSelectionController" fx:id="verticalStockList">
...
</VBox>
StockLookupTool.java(带有start方法的类)
public class StockLookupTool extends Application {
....
@Override
public void start(Stage stage) throws Exception {
...
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/fxml/stock_lookup_tool_main.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root, 250, 300);
stage.setTitle(APPLICATION_TITLE);
stage.setScene(scene);
stage.setFullScreen(true);
stage.show();
}
....
}
StockLookupToolApplicationController(stock_lookup_tool_main.fxml的控制器)
public class StockLookupToolApplicationController {
...
@FXML public Label stockSearchLabel;
@FXML public Label newsLabel;
@FXML public Label settings;
@FXML public BorderPane borderPane;
@FXML public HBox topApplicationNavigation;
@FXML
public void handleStockSearchSelection() {
logger.log(Level.INFO, "Setting GUI View to Stock Search");
setView(StockSearchSelectionController.getInstance());
}
private void setView(Selection selection) {
borderPane.setLeft(selection.getLeft());
borderPane.setCenter(selection.getCenter());
borderPane.setRight(selection.getRight());
borderPane.setBottom(selection.getBottom());
}
}
StockSearchSelectionController.java(的控制器 stock_information_center.fxml和favorite_stocks_sidebar.fxml)
public class StockSearchSelectionController implements Selection {
@FXML public Label favoriteStocksLabel;
@FXML public TextField addFavoriteStockInput;
@FXML public VBox verticalStockList;
@FXML public HBox addFavoriteStockInputContainer;
@FXML public GridPane stockInformationCenter;
@FXML
public void handleFavoriteStockInput(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.ENTER) {
...
// makes visual changes to both stockInformationCenter AND verticalStockList, hence I need access to both fxml files (which is why this controls both).
}
}
@Override
public Node getLeft() {
return verticalStockList;
}
@Override
public Node getCenter() {
return stockInformationCenter;
}
}
更多信息:
界面Selection
包含方法getLeft()
和getCenter()
(以及其他不相关的方法)。这两个都返回Node
。在stock_lookup_tool_main.fxml
中,在top
的{{1}}部分,我有一个按钮(在提供的代码段中删除),按下时,会调用BorderPane
(此方法确实调用了发生了,我用记录器验证了它。
现在有一个控制器可以控制 handleStockSearchSelection()
和stock_information_center.fxml
。该控制器实现favorite_stocks_sidebar.fxml
,然后实现Selection
和getLeft()
。 getCenter()
返回VBox变量
与getLeft()
相关联,而favorite_stocks_sidebar.fxml
返回与getCenter()
相关的GridPane变量。调用stock_information_center.fxml
时,borderPane对象的左侧部分设置为VBox,中心设置为GridPane。所有这些方法调用/操作都已经过验证。但是,场景没有视觉变化。
我的问题是:为什么这些对borderPane的更改没有在场景中直观地实现?我在场景&lt; - &gt;之间建立了一个链接。 handleStockSearchSelection()
通过设置加载程序的位置。我还在stock_lookup_tool_main.fxml
&lt; - &gt;之间建立了链接。它的控制器,因此他们应该分享变化。我通过在变量上调用setLeft()和setCenter()(与ID,borderPane同名)修改了控制器中stock_lookup_tool_main.fxml
的边框窗格。然而,视觉上的场景并没有改变。