我在我的应用程序中使用JavaFX SplitPanes,当高度和宽度发生变化时,我需要更改分隔符的位置,因为希望将分隔符位置固定在上。我的代码如下:
scene.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) {
GUIController.resetMainSplitPane();
}
});
scene.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneHeight, Number newSceneHeight) {
GUIController.resetMusicSplitPane();
}
});
resetSplitPane方法:
public static void resetMusicSplitPane() {
musicSplitPane.setDividerPosition(0, 0.7);
Util.err("height changed");
}
我确实得到了消息‘高度改变’,但是分隔符的位置有,而不是被改变了。我认为这与JavaFX执行gui更改有关,这些更改覆盖了我的更改。换句话说,我更改了分隔符的位置,但是JavaFX更改了它,因为它的执行布局会随着窗口大小的调整而改变。
发布于 2014-05-24 00:41:47
通常情况下,当场景被调整大小时,分割器会自动调整自己(即分割器两侧的大小增加/减小)。我能想到的唯一原因,关于为什么,你试图设置分隔位置,不是增加或减少的高度/宽度的一边的分离器。这可以通过使用
SplitPane.setResizableWithParent(paneToBeFixed, Boolean.FALSE);
演示它如何工作的一个小例子,( Sergey在here中给出的例子)
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class TestObjectArray extends Application {
@Override
public void start(Stage stage) {
final SplitPane root = new SplitPane();
final Pane paneFixed = new StackPane();
paneFixed.getChildren().add(new Text("Fixed"));
SplitPane.setResizableWithParent(paneFixed, Boolean.FALSE);
Pane paneFree = new StackPane();
paneFree.getChildren().add(new Text("Free"));
root.getItems().addAll(paneFixed, paneFree);
Scene scene = new Scene(root, 300, 200);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
https://stackoverflow.com/questions/23829381
复制相似问题