如何从 scrollPane Javafx 中的滚动条中删除滚动按钮
How do I remove scroll buttons from scroll bar in a scrollPane Javafx
css 文件中的代码:
.scroll-bar .button
{
visibility: hidden;
-fx-background-color: black;
}
但对滚动条按钮没有影响:
请给我提示如何解决这个问题
我看到了一个删除 JavaFX 上下文菜单上的滚动箭头的解决方案,也许这会有所帮助:
.context-menu .scroll-arrow {
-fx-padding: 0 0 0 0;
}
.context-menu .menu-item {
-fx-border-style: solid;
-fx-border-color: transparent;
}
来源:https://gist.github.com/oowekyala/ccc67aa8663e788c072d3824b1c3d22a
我想到了一些似乎可以满足您要求的东西。我绝对不保证它会继续为以后的 JavaFX 版本工作。
我所做的是查看默认的摩德纳风格 sheet。然后尝试删除与滚动条按钮相关的所有填充和插入,有效地使它们不可见,并将首选大小应用于滚动条(因为它们基于按钮的首选大小)。
可能有更有效的方法来处理这个和隐藏东西。也许它可以用更少的规则来完成,但无论如何,这就是我想出的并且它似乎有效。
此外,如果您将滚动窗格设置得非常小,则默认功能是隐藏拇指并允许仅通过按钮在滚动窗格中移动。在您的情况下,按钮不存在,所以不要让滚动窗格变得太小,否则您将失去滚动窗格的平移功能。
无论如何,这是一些示例代码:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class NoButtonScroll extends Application {
private static final Lorem lorem = new Lorem();
private static final String NO_BUTTON_SCROLL_BARS = """
data:text/css,
.scroll-bar:vertical {
-fx-pref-width: 1.12em;
}
.scroll-bar:horizontal {
-fx-pref-height: 1.12em;
}
.scroll-pane > .scroll-bar:horizontal > .increment-button,
.scroll-pane > .scroll-bar:horizontal > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-pane > .scroll-bar:vertical > .increment-button,
.scroll-pane > .scroll-bar:vertical > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-bar > .increment-button,
.scroll-bar > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-bar:horizontal > .increment-button,
.scroll-bar:horizontal > .decrement-button {
-fx-background-insets: 0 0 0 0 , 0 0 0 0, 0 0 0 0, 0 0 0 0 0;
}
.scroll-bar:vertical > .increment-button,
.scroll-bar:vertical > .decrement-button {
-fx-background-insets: 0 0 0 0, 0 0 0 0, 0 0 0 0;
}
.scroll-bar:horizontal > .decrement-button > .decrement-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:horizontal > .increment-button > .increment-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:vertical > .decrement-button > .decrement-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:vertical > .increment-button > .increment-arrow {
-fx-padding: 0 0 0 0;
}
""";
@Override public void start(Stage stage) {
ScrollPane standardScrollPane = new ScrollPane(generateText());
ScrollPane noButtonScrollPane = new ScrollPane(generateText());
noButtonScrollPane.getStylesheets().add(NO_BUTTON_SCROLL_BARS);
final VBox layout = new VBox(10, standardScrollPane, noButtonScrollPane);
layout.setPadding(new Insets(10));
layout.setPrefSize(600, 400);
stage.setScene(new Scene(layout));
stage.show();
}
private Text generateText() {
Text sampleText = new Text(lorem.nextText(500));
sampleText.setWrappingWidth(800);
return sampleText;
}
// class for generating example text for test data, not integral to the solution.
private static final class Lorem {
private static final String[] lorem = "lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua".split(" ");
private int idx = 0;
public String nextWord() {
return lorem[getAndIncrementIdx()];
}
public String nextText(int nWords) {
return IntStream.range(0, nWords)
.mapToObj(i -> nextWord())
.collect(Collectors.joining(" "));
}
private int getAndIncrementIdx() {
int retVal = idx;
idx = (idx + 1) % lorem.length;
return retVal;
}
}
public static void main(String[] args) { launch(args); }
}
css 文件中的代码:
.scroll-bar .button
{
visibility: hidden;
-fx-background-color: black;
}
但对滚动条按钮没有影响:
请给我提示如何解决这个问题
我看到了一个删除 JavaFX 上下文菜单上的滚动箭头的解决方案,也许这会有所帮助:
.context-menu .scroll-arrow {
-fx-padding: 0 0 0 0;
}
.context-menu .menu-item {
-fx-border-style: solid;
-fx-border-color: transparent;
}
来源:https://gist.github.com/oowekyala/ccc67aa8663e788c072d3824b1c3d22a
我想到了一些似乎可以满足您要求的东西。我绝对不保证它会继续为以后的 JavaFX 版本工作。
我所做的是查看默认的摩德纳风格 sheet。然后尝试删除与滚动条按钮相关的所有填充和插入,有效地使它们不可见,并将首选大小应用于滚动条(因为它们基于按钮的首选大小)。
可能有更有效的方法来处理这个和隐藏东西。也许它可以用更少的规则来完成,但无论如何,这就是我想出的并且它似乎有效。
此外,如果您将滚动窗格设置得非常小,则默认功能是隐藏拇指并允许仅通过按钮在滚动窗格中移动。在您的情况下,按钮不存在,所以不要让滚动窗格变得太小,否则您将失去滚动窗格的平移功能。
无论如何,这是一些示例代码:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class NoButtonScroll extends Application {
private static final Lorem lorem = new Lorem();
private static final String NO_BUTTON_SCROLL_BARS = """
data:text/css,
.scroll-bar:vertical {
-fx-pref-width: 1.12em;
}
.scroll-bar:horizontal {
-fx-pref-height: 1.12em;
}
.scroll-pane > .scroll-bar:horizontal > .increment-button,
.scroll-pane > .scroll-bar:horizontal > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-pane > .scroll-bar:vertical > .increment-button,
.scroll-pane > .scroll-bar:vertical > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-bar > .increment-button,
.scroll-bar > .decrement-button {
-fx-padding: 0 0 0 0;
}
.scroll-bar:horizontal > .increment-button,
.scroll-bar:horizontal > .decrement-button {
-fx-background-insets: 0 0 0 0 , 0 0 0 0, 0 0 0 0, 0 0 0 0 0;
}
.scroll-bar:vertical > .increment-button,
.scroll-bar:vertical > .decrement-button {
-fx-background-insets: 0 0 0 0, 0 0 0 0, 0 0 0 0;
}
.scroll-bar:horizontal > .decrement-button > .decrement-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:horizontal > .increment-button > .increment-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:vertical > .decrement-button > .decrement-arrow {
-fx-padding: 0 0 0 0;
}
.scroll-bar:vertical > .increment-button > .increment-arrow {
-fx-padding: 0 0 0 0;
}
""";
@Override public void start(Stage stage) {
ScrollPane standardScrollPane = new ScrollPane(generateText());
ScrollPane noButtonScrollPane = new ScrollPane(generateText());
noButtonScrollPane.getStylesheets().add(NO_BUTTON_SCROLL_BARS);
final VBox layout = new VBox(10, standardScrollPane, noButtonScrollPane);
layout.setPadding(new Insets(10));
layout.setPrefSize(600, 400);
stage.setScene(new Scene(layout));
stage.show();
}
private Text generateText() {
Text sampleText = new Text(lorem.nextText(500));
sampleText.setWrappingWidth(800);
return sampleText;
}
// class for generating example text for test data, not integral to the solution.
private static final class Lorem {
private static final String[] lorem = "lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua".split(" ");
private int idx = 0;
public String nextWord() {
return lorem[getAndIncrementIdx()];
}
public String nextText(int nWords) {
return IntStream.range(0, nWords)
.mapToObj(i -> nextWord())
.collect(Collectors.joining(" "));
}
private int getAndIncrementIdx() {
int retVal = idx;
idx = (idx + 1) % lorem.length;
return retVal;
}
}
public static void main(String[] args) { launch(args); }
}