0
我有一個Javafx應用程序,它爲用戶提供了一組工具,每個工具都在一個新的Stage中啓動。我嘗試了幾個小時,但其中一個階段從不顯示垂直滾動條。由於我永遠無法看到舞臺的下半部分,因此我無法訪問水平滾動條。當我在SceneBuilder中嘗試舞臺時,舞臺佔用的空間更少(也有些奇怪,但現在我不擔心)我看到水平滾動條,但仍然不是垂直滾動條。Javafx stage不顯示V-Scrollbar
階段包含一個嵌套的fxml。主要包含一個帶有Treeview的Splitpane。根據樹形視圖中的用戶選擇,控制器加載另一個fxml,該fxml始終是一個包含匹配ui的Scrollpane,並將其放在分離面板的另一側。正是這個Scrollpane導致了這個問題。
這裏是啓動新的階段的代碼:
protected void showEditor(URL url, Window parent) {
FXMLLoader fxmlLoader = new FXMLLoader(url);
fxmlLoader.setControllerFactory(springContext::getBean); // lookup the controller from the spring application context
try {
Parent appNode = fxmlLoader.load();
SystemDependent ctrl = fxmlLoader.getController();
ctrl.setSystemContext(mySelectedSystem);
Scene scene = new Scene(appNode);
Stage stage = new Stage();
ctrl.setStage(stage);
//stage.initOwner(parent);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
這是在控制器這使滾動窗格成在將splitPane的右側的代碼:
protected ChangeListener<TreeItem<UserRequirement>> getRequirementSelectionChangeListener() {
return new ChangeListener<TreeItem<UserRequirement>>() {
@Override
public void changed(ObservableValue<? extends TreeItem<UserRequirement>> observable, TreeItem<UserRequirement> oldValue, TreeItem<UserRequirement> newValue) {
logger.debug("User selected requirement: " + newValue.getValue().debug());
UserRequirement oldRequirement = newValue.getValue();
reqService.save(oldRequirement);
UserRequirement newRequirement = newValue.getValue();
try {
if(currentLevel != newRequirement.getLevel()) {
currentLevel = newRequirement.getLevel();
RequirementsFactory factory = RequirementFactoryProducer.getRequirementFactory(newRequirement.getLevel());
ScrollPane reqPane = factory.getHierarchyPane();
splitPane.getItems().add(reqPane);
ctrl = factory.getHierarchyController();
}
ctrl.setSystemContext(getSelectedProduct());
ctrl.setRequirement(newRequirement);
stage.sizeToScene();
stage.centerOnScreen();
splitPane.setDividerPosition(0, 0.1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}
外fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" stylesheets="@../stylesheets/controller.css" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.agiletunes.controllers.requirement.RequirementEditorCtrl">
<top>
<HBox alignment="BOTTOM_LEFT" maxWidth="1.7976931348623157E308" nodeOrientation="LEFT_TO_RIGHT" BorderPane.alignment="BOTTOM_LEFT">
<children>
<Label styleClass="tool" text="Header">
</Label>
<Label styleClass="editor" text="header">
</Label>
</children>
<BorderPane.margin>
<Insets bottom="10.0" left="20.0" right="20.0" top="20.0" />
</BorderPane.margin>
</HBox>
</top>
<center>
<SplitPane fx:id="splitPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" BorderPane.alignment="CENTER">
<items>
<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="pane">
<children>
<ScrollPane fitToHeight="true" fitToWidth="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" AnchorPane.bottomAnchor="20.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
<content>
<TreeView fx:id="requirementsTreeView" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" />
</content>
</ScrollPane>
</children>
</AnchorPane>
</items>
<BorderPane.margin>
<Insets />
</BorderPane.margin>
</SplitPane>
</center>
</BorderPane>
,並在將splitPane:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Pagination?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.web.HTMLEditor?>
<ScrollPane fitToHeight="true" fitToWidth="true" pannable="true" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.agiletunes.controllers.requirement.UserStoryEditorCtrl">
<content>
<GridPane fx:id="gridPane" hgap="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" styleClass="pane" stylesheets="@../stylesheets/controller.css" vgap="10.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="20.0" percentWidth="9.0" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="80.0" percentWidth="7.0" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="7.0" />
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints fillHeight="false" minHeight="10.0" vgrow="SOMETIMES" />
<RowConstraints fillHeight="false" vgrow="NEVER" />
<RowConstraints maxHeight="1.7976931348623157E308" minHeight="50.0" prefHeight="100.0" vgrow="ALWAYS" />
<RowConstraints fillHeight="false" vgrow="SOMETIMES" />
<RowConstraints fillHeight="false" vgrow="SOMETIMES" />
<RowConstraints maxHeight="1.7976931348623157E308" vgrow="ALWAYS" />
</rowConstraints>
<children>
<HBox alignment="BOTTOM_LEFT" maxWidth="1.7976931348623157E308" nodeOrientation="LEFT_TO_RIGHT" GridPane.columnSpan="9" GridPane.valignment="BOTTOM">
<GridPane.margin>
<Insets bottom="10.0" left="15.0" />
</GridPane.margin>
<children>
<Label styleClass="tool2" text="Header">
<font>
<Font name="System Bold" size="28.0" />
</font>
</Label>
</children>
</HBox>
<ComboBox fx:id="personaComboBox" maxWidth="1.7976931348623157E308" promptText="- select -" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.valignment="TOP">
<GridPane.margin>
<Insets left="20.0" right="5.0" />
</GridPane.margin>
</ComboBox>
<Label text="Label" GridPane.rowIndex="1" GridPane.valignment="BOTTOM">
<padding>
<Insets left="10.0" />
</padding>
<GridPane.margin>
<Insets left="20.0" />
</GridPane.margin>
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label text="label" GridPane.columnIndex="2" GridPane.rowIndex="1" GridPane.valignment="BOTTOM">
<GridPane.margin>
<Insets left="5.0" />
</GridPane.margin>
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label text="label" GridPane.columnIndex="5" GridPane.rowIndex="1" GridPane.valignment="BOTTOM">
<GridPane.margin>
<Insets left="5.0" />
</GridPane.margin>
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label text="label" GridPane.columnIndex="7" GridPane.columnSpan="2" GridPane.rowIndex="1" GridPane.valignment="BOTTOM">
<GridPane.margin>
<Insets left="5.0" />
</GridPane.margin>
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<TextArea fx:id="triggerTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="<when>" wrapText="true" GridPane.columnIndex="2" GridPane.columnSpan="3" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextArea>
<TextArea fx:id="featureTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="<what>" wrapText="true" GridPane.columnIndex="5" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextArea>
<TextArea fx:id="resultTextArea" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" promptText="<why>" wrapText="true" GridPane.columnIndex="7" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
<GridPane.margin>
<Insets right="12.0" />
</GridPane.margin>
</TextArea>
<Label text="label" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="30.0" right="10.0" />
</GridPane.margin>
</Label>
<Button fx:id="newVersionButton" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#createNewVersion" text="New" GridPane.columnIndex="4" GridPane.halignment="LEFT" GridPane.hgrow="SOMETIMES" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="10.0" />
</GridPane.margin>
</Button>
<Label text="label" GridPane.columnIndex="5" GridPane.halignment="LEFT" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="10.0" />
</GridPane.margin>
</Label>
<ComboBox fx:id="statusComboBox" maxWidth="1.7976931348623157E308" onAction="#handleStatusChange" onContextMenuRequested="#showStatusHistory" promptText="- select -" GridPane.columnIndex="6" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4">
<GridPane.margin>
<Insets />
</GridPane.margin>
</ComboBox>
<Label text="label" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="30.0" right="10.0" />
</GridPane.margin>
</Label>
<TextField fx:id="rankTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3">
<GridPane.margin>
<Insets right="10.0" />
</GridPane.margin>
</TextField>
<Label text="label" GridPane.columnIndex="2" GridPane.halignment="LEFT" GridPane.rowIndex="4">
<GridPane.margin>
<Insets right="10.0" />
</GridPane.margin>
</Label>
<TextField fx:id="creationDateTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="3" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4" />
<TextField fx:id="authorTextField" editable="false" maxWidth="1.7976931348623157E308" GridPane.columnIndex="8" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4">
<GridPane.margin>
<Insets right="12.0" />
</GridPane.margin>
</TextField>
<Label text="label" GridPane.columnIndex="7" GridPane.halignment="LEFT" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="10.0" />
</GridPane.margin>
</Label>
<ComboBox fx:id="myVersionComboBox" maxWidth="1.7976931348623157E308" onAction="#versionSelection" promptText="- select -" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS" GridPane.rowIndex="4">
<GridPane.margin>
<Insets right="10.0" />
</GridPane.margin>
</ComboBox>
<Label text="label" GridPane.columnIndex="5" GridPane.halignment="LEFT" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="10.0" />
</GridPane.margin>
</Label>
<ComboBox fx:id="prioComboBox" maxWidth="1.7976931348623157E308" promptText="- select -" GridPane.columnIndex="3" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" GridPane.rowIndex="3" />
<Label text="label" GridPane.columnIndex="2" GridPane.halignment="LEFT" GridPane.rowIndex="3">
<GridPane.margin>
<Insets right="10.0" />
</GridPane.margin>
</Label>
<TabPane fx:id="tabPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" tabClosingPolicy="UNAVAILABLE" GridPane.columnSpan="2147483647" GridPane.hgrow="ALWAYS" GridPane.rowIndex="5" GridPane.vgrow="ALWAYS">
<tabs>
<Tab text="Tab 1">
<content>
<fx:include fx:id="embeddedAcceptanceCriteria" source="AcceptanceCriteriaEditorPane.fxml" />
</content>
</Tab>
<Tab text="Tab 2">
<content>
<fx:include fx:id="embeddedEffortEstimate" source="EffortEstimationEditorPane.fxml " />
</content>
</Tab>
<Tab text="Tab 3">
<content>
<Pagination fx:id="pagination" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" pageCount="0" />
</content>
</Tab>
<Tab text="Description">
<content>
<HTMLEditor fx:id="descriptionTextArea" htmlText="<html><head></head><body contenteditable="true"></body></html>" onKeyReleased="#keyReleased" prefHeight="200.0" prefWidth="506.0" />
</content>
</Tab>
<Tab text="Tab 5">
<content>
</content>
</Tab>
<Tab text="Tab 6">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
<GridPane.margin>
<Insets bottom="20.0" left="12.0" right="12.0" />
</GridPane.margin>
</TabPane>
<TextField fx:id="releaseTextField" editable="false" GridPane.columnIndex="6" GridPane.rowIndex="3" />
<Label text="Label" GridPane.columnIndex="7" GridPane.halignment="LEFT" GridPane.rowIndex="3">
<GridPane.margin>
<Insets left="10.0" />
</GridPane.margin>
</Label>
<TextField fx:id="iterationTextField" editable="false" GridPane.columnIndex="8" GridPane.rowIndex="3">
<GridPane.margin>
<Insets right="12.0" />
</GridPane.margin>
</TextField>
</children>
<padding>
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
</padding>
</GridPane>
</content>
</ScrollPane>
任何幫助,高度讚賞。先謝謝你!
你是什麼意思?右側的所有元素都已經在ScrollPane中。將外部BorderPane對話框放置在ScrollPane中會導致一種不同的ui易用性,這會是奇怪的。或者這個測試會提供一個有助於確定根本原因的內容? – Alex
無論如何我都試過了。沒有不同。這讓我覺得有些更基本的錯誤。所以我把BorderPane改成了VBox。瞧,我可以看到較低的滾動條。雖然現在好一些,但我還有一個問題:右側窗格仍然缺少垂直滾動窗格,右側Splitpane部分的標題的大部分上半部分缺失。 – Alex