如何实现整个SplitPane的比例调整?
public class JfxSplitPaneTest extends Application {
@Override
public void start(Stage stage) throws Exception {
SplitPane split = new SplitPane();
StackPane child1 = new StackPane();
child1.setStyle("-fx-background-color: #0000AA;");
StackPane child2 = new StackPane();
child2.setStyle("-fx-background-color: #00AA00;");
StackPane child3 = new StackPane();
child3.setStyle("-fx-background-color: #AA0000;");
split.getItems().addAll(child1, child2, child3);
//split.setDividerPositions(0.1f, 0.6f, 0.9f)
stage.setScene(new Scene(split, 400, 300));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
启动程序:

设置分隔符我喜欢它们:

使窗口宽度非常小(我继续使它变得更小,没有图片):

调整大小并观察分频器既不是我设置它们也不是它们在程序启动时的方式.

这样做会使它更接近我的期望:
child1.setMinWidth(Region.USE_PREF_SIZE)
child1.setPrefWidth(100)
child2.setMinWidth(Region.USE_PREF_SIZE)
child2.setPrefWidth(200)
child3.setMinWidth(Region.USE_PREF_SIZE)
child3.setPrefWidth(300)
Run Code Online (Sandbox Code Playgroud)
除了分频器最初处于错误的位置(直到我调整SplitPane的大小,1px足够)并且当缩小窗口宽度时,分频器在组件内部.
我怎么能让这个工作好吗?
我有一个从FXML创建的splitpane,它由从左到右的三个窗格组成.我希望能够隐藏最右边的窗格,但我找不到任何隐藏它的东西.如果我关闭可见性,它会隐藏窗格内容.我想要的是暂时隐藏它,因此可视地删除窗格.
作为临时解决方法,我将分隔线移动到100%,但这会使分隔线可见.另一个副作用是,如果我调整主窗口的大小,分隔符不会保持在最右边的位置.
有关在splitpane中隐藏一个窗格的任何提示?
或者关于在没有splitpane的情况下实现此目标的最佳方法的任何提示(最右边的窗格在未隐藏时需要调整大小).一般指向技术/容器的指针,因为我是Java/JavaFX的新手而不是编程:)
在Swing中,我们可以使用setResizeWeight()JSplitPane来确定SplitPane的哪个部分获得了可用空间.JavaFX 2.2中是否有等效的方法?我只能找到setDividerPosition()并不真正做我想要的方法(我可以在每次大小改变时手动调用它,但是如果可能的话我想避免这种情况.)
我也可以打电话setResizableWithParent(false),但这又不能真正提供我所追求的那种控制.
我有一个带有SplitPane的JavaFX应用程序.我想在SplitPane上禁用Divider,因此在应用程序运行时无法更改其位置.我怎样才能做到这一点?
我正在尝试重新调整图像大小,使其适合(缩放)在 a 分配的空间中SplitPane(有关解决方法的建议:该图像在运行程序时会发生变化,它应该从文本生成)。我当前使用的 ImageView 更改了SplitPane Divider. 分隔线永远不会导致ImageView缩小超过图像的大小。
将ImageViewfitWidthProperty链接到 aVBox并没有给我预期的调整大小行为。增加ImageView的大小确实有效(它在没有绑定的情况下固定),但图像永远不会增长,它只是在它周围有边框。
我的 MWE:
sample.fxml:
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<SplitPane orientation="HORIZONTAL" xmlns:fx="http://javafx.com/fxml">
<TextArea fx:id="textArea"/>
<VBox fx:id="vBox" alignment="CENTER">
<HBox fx:id="hBox" alignment="CENTER">
<ImageView fx:id="imageView"/>
</HBox>
</VBox>
</SplitPane>
Run Code Online (Sandbox Code Playgroud)
Controller.java:
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
public class Controller {
@FXML
private TextArea textArea = new TextArea();
@FXML
private …Run Code Online (Sandbox Code Playgroud) 我不知道如何在 JavaFX 8 SplitPane 上监听“Divider Repositioned”事件。这是一个简单的工作应用程序,只需要添加事件侦听器。有人可以帮助我指出正确的方向吗?
public class TestCase extends Application {
public void start(Stage primaryStage) throws Exception {
Pane leftPane = new Pane();
Pane rightPane = new Pane();
SplitPane splitPane = new SplitPane(leftPane, rightPane);
// Need to create a listener that fires whenever the SplitPane's Divider is repositioned
// Within this listener I need access to the leftPane and rightPane so I can call requestLayout()
primaryStage.setScene(new Scene(splitPane));
primaryStage.setWidth(800);
primaryStage.setHeight(600);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
} …Run Code Online (Sandbox Code Playgroud) 如果内容具有多行 FlowPane,我会遇到 SplitPane 分隔符的问题。如果 FlowPane 在一行中呈现,则没有问题。如果 FlowPane 有多于一行,则内容部分会发生变化。
行数越多,移位越大。
为了演示这个问题,下面是一个快速演示。该演示包含三个垂直 splitPane,其中每个 SplitPane 都有不同编号的 FlowPane。行数。(第一个 splitPane - 1 行,第二个 SplitPane - 2 行,第三个 SplitPane - 3 行)
当使用 1 个 FlowPane 行调整 splitPane 大小时,没有问题,一切正常。然而,如果我调整第二个 splitPane 的大小,内容就会从所需的位置移动,从而在 SplitPane 中留下空白空间。当调整第三个 splitPane 的大小时,空间甚至更大。
我相信这应该是 SplitPane-FlowPane 计算中的一些问题(或者我也可能是错的)。但在这个阶段,我不是试图找出根本原因(这将在 JavaFX 源代码中的某个地方),而是更迫切地想通过一些解决方法来解决这个问题。
我尝试了几种方法,例如绑定高度、设置一些区域常量等,但都没有奏效。FlowPane的所有高度计算确实是正确的。
你们中的任何人对我如何解决这个问题有任何建议吗?
注意:该问题可以在所有版本的 JavaFX 中重现
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.SplitPane;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
@SuppressWarnings("javadoc")
public class SplitPaneDividerIssueDemo extends …Run Code Online (Sandbox Code Playgroud) 每当我调整拆分窗格的大小时,有没有办法添加侦听器?
我目前有
split.getDividers().get(0).positionProperty().addListener(new ChangeListener<Number>(){
public void changed(ObservableValue<? extends Number> observableValue, Number oldWindowWidth, Number newWindowWidth){
//code
}
});
Run Code Online (Sandbox Code Playgroud)
它检测窗口或分隔符大小何时更改,但我只需要知道分隔符位置何时更改,例如当我用鼠标拖动它时。有没有办法做到这一点?任何帮助将不胜感激!
我有两个 StackPanes(pane1 和 pane2)显示在 SplitPane (splitPane) 中。SplitPane 的分隔线位置在构建器中设置为 0.3。第二个 StackPane (pane2) 包含一个 Button,它也将 SplitPane 的分隔线位置设置为 0.3。
在其他条件不变的情况下,预期的行为是两个操作(在构建器中设置分隔符位置并通过操作设置分隔符位置)都有效或无效。
然而,只有后者才真正起作用。
SplitPane 的构造和 Button 的 onAction 之间有什么变化。是什么阻碍了分隔器在构建器中的放置?
StackPane pane1 = new StackPane();
StackPane pane2 = new StackPane();
final SplitPane splitPane = SplitPaneBuilder.create()
.items(pane1, pane2)
// Environment A
.dividerPositions(new double[] {.3}) // splitPane.setDividerPosition(s)(...), etc. yield same result
.orientation(Orientation.HORIZONTAL)
.build();
// The following line influences environment A outcome, though it does not fix the issue
SplitPane.setResizableWithParent(pane1, false);
pane2.getChildren().add(ButtonBuilder.create()
.text("Divider Position")
.onAction(new EventHandler<ActionEvent>() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我有一个水平分割窗格,我想点击按钮,更改分隔符位置,以便我创建一些"幻灯片"动画.
divider将从0开始(完成左侧)并且在我的点击它将打开直到0.2,当我再次点击时,它将返回到0;
现在我实现了这一点,我只是使用
spane.setdividerPositions(0.2);
Run Code Online (Sandbox Code Playgroud)
和分频器位置的变化,但我不能设法慢慢地这样做我真的很喜欢改变分频器位置时的滑动感觉.
谁能帮助我?我在谷歌上发现的所有例子都显示了一些DoubleTransition,但在java 8中不再存在,至少我没有导入.
我有一个布局,我有一个垂直拆分窗格,分为两个组件.我希望生长的分割板右侧内部的组件(它是一个图像),但拆分窗格左侧的组件我希望保持在完全相同的位置,当窗口处的分隔符完全相同的位置被放大了.
我试图将左侧的AnchorPane包装在一个Vbox中,它似乎工作,除非调整窗口大小时左侧的所有组件都向下移动.当我将它包装在HBox中时也会发生这种情况.
我想不出解决这个问题的最佳方法.我正在使用场景构建器,我仍然是Javafx的新手.有人可以帮忙吗?
谢谢!
在 Swing 中,我用来JSplitPane创建一个左侧(前导)具有树视图的区域和一个右侧(尾随)具有十六进制查看器的区域,用户可以在其中移动分隔线来调整每个获得的空间。
由于 Jetpack Compose 仍然相对较新,因此诸如SplitView(此类组件的假设名称遵循其命名方案)之类的基本组件尚不存在。我能看到的最接近的概念是RowandColumn但这些用户不能调整大小(据我所知。)
如果不嵌入 Swing JSplitPane,然后在分割窗格的每一侧嵌入 Compose 组件,是否有一个好的方法可以做到这一点?
我找到了一个例子,成功了 90%,但是有一些被删除的 API 很难找到替代品,因为发行说明似乎没有提及它。(!!)