首先完成我的演示程序。
在上面的图像组件层次结构中
JFRAme将包含
调整JSplitPane
在split [Horizontal]中都有JFXPanels
每个JFXPanel都包含ScrollPane [javafx]
现在,您可以从图像中看到右侧面板包含水平滚动条,该滚动条向上[与滚动条的高度相同] JFXPanel的内容。
而在左侧面板中没有滚动条。
我的要求是在调整窗口大小时[通过最小化,最大化,拖动窗口...无论如何]面板的内容必须对齐。要做到这一点,面板应该有水平滚动条,而不是任何一个。
现在左侧面板不可调整大小,因此在任何调整窗口大小的情况下,只有右侧面板会调整大小。
因此,在调整窗口大小时,如何识别左侧面板中是否应添加滚动条? 此外,我知道如何添加滚动条,但重要的是我应该在哪里放置代码,以便仅在调整窗口大小时执行?
答案 0 :(得分:0)
这对我有用。这有点像黑客攻击:对于一个,你必须使用查找来获取滚动条;而且我必须假设ScrollPane
实现只是设置滚动条的可见属性来显示/隐藏它(例如,与在场景图中添加和删除它相反)。
这个例子是所有JavaFX,没有Swing,但我认为它应该很容易翻译到你的上下文。我在Java 8下进行了测试,我认为它应该在Java 7下使用JavaFX 2进行编译。
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TwoScrollPanes extends Application {
@Override
public void start(Stage primaryStage) {
final SplitPane split = new SplitPane();
final ScrollPane scrollPane1 = makeScrollPane(Control.USE_PREF_SIZE);
final ScrollPane scrollPane2 = makeScrollPane(250);
// if you want the vertical scrollbars to scroll in unison:
scrollPane1.vminProperty().bindBidirectional(scrollPane2.vminProperty());
scrollPane1.vmaxProperty().bindBidirectional(scrollPane2.vmaxProperty());
scrollPane1.vvalueProperty().bindBidirectional(scrollPane2.vvalueProperty());
split.getItems().addAll(scrollPane1, scrollPane2);
Scene scene = new Scene(split, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
Node rightHorizScroller = null ;
for (Node n : scrollPane2.lookupAll(".scroll-bar")) {
ScrollBar sb = (ScrollBar) n;
if (sb.getOrientation() == Orientation.HORIZONTAL) {
rightHorizScroller = sb ;
}
}
if (rightHorizScroller != null) {
scrollPane1.hbarPolicyProperty().bind(
Bindings.when(rightHorizScroller.visibleProperty())
.then(ScrollBarPolicy.ALWAYS)
.otherwise(ScrollBarPolicy.NEVER));
}
}
private ScrollPane makeScrollPane(double minLabelWidth) {
ScrollPane scrollPane = new ScrollPane();
VBox content = new VBox();
for (int i = 1; i <= 100; i++) {
Label label = new Label("Item "+i);
label.setMinWidth(minLabelWidth);
content.getChildren().add(label);
}
scrollPane.setContent(content);
return scrollPane ;
}
public static void main(String[] args) {
launch(args);
}
}