スクロールペインのスクロールバーにアクセスする方法
質問
ScrollBar
に含まれている標準によるScrollPane
コンポーネントに関する情報をいくつか取得しようとしています。特に水平height
のScrollbar
を読むことに興味があります。どうすればそれを参照できますか?
解決
上記の方法は皆さん(私を含む)ではうまくいかなかったので、私はそれをもう少し調査し、問題の原因を見つけました。
一般的に、両方の方法は働いていますが、 ScrollPane
's skin
プロパティが設定されました。私の場合、skin
はまだnull
の後に FXMLLoader
他のヒント
スクロールバーを見つけるためにノードクラスのlookupall()メソッドを使用できると思います。 http:// docs。oracle.com/javafx/2/api/javafx/scene/node.html#lookupall(java.lang.string)
例えば:
package com.test;
import java.util.Set;
import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPaneBuilder;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.stage.Stage;
public class JavaFxScrollPaneTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
String longString = "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.";
Text longText = TextBuilder.create().text(longString).build();
ScrollPane scrollPane = ScrollPaneBuilder.create().content(longText).build();
primaryStage.setScene(new Scene(scrollPane, 400, 100));
primaryStage.show();
Set<Node> nodes = scrollPane.lookupAll(".scroll-bar");
for (final Node node : nodes) {
if (node instanceof ScrollBar) {
ScrollBar sb = (ScrollBar) node;
if (sb.getOrientation() == Orientation.HORIZONTAL) {
System.out.println("horizontal scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
}
}
}
}
}
. これはベストプラクティスではありませんが、
private boolean determineVerticalSBVisible(final ScrollPane scrollPane) {
try {
final ScrollPaneSkin skin = (ScrollPaneSkin) scrollPane.getSkin();
final Field field = skin.getClass().getDeclaredField("vsb");
field.setAccessible(true);
final ScrollBar scrollBar = (ScrollBar) field.get(skin);
field.setAccessible(false);
return scrollBar.isVisible();
} catch (final Exception e) {
e.printStackTrace();
}
return false;
}
.
水平スクロールバーに「USB」を使用してください。
ヘンリュックゲーディー。
所属していません StackOverflow