如何从scrollPane Javafx中的滚动条中删除滚动按钮

Reb*_*D.G 5 css java javafx

这是 css 文件中的代码:

.scroll-bar .button
{
visibility: hidden;
-fx-background-color: black;
}
Run Code Online (Sandbox Code Playgroud)

但它对滚动条按钮没有影响:

请给我一个提示如何解决这个问题

jew*_*sea 6

我想出了一些似乎可以做你想做的事情。我绝对不保证它将继续适用于更高版本的 JavaFX。

我所做的是查看默认的摩德纳样式表。然后尝试删除与滚动条按钮相关的所有填充和插图,有效地使它们不可见,并对滚动条应用首选尺寸(因为它们基于按钮的首选尺寸)。

可能有更有效的方法来处理这个问题并隐藏事物。也许可以用更少的规则来完成,但无论如何,这就是我想出的,而且它似乎有效。

另外,如果您将滚动窗格设置得非常小,则默认功能是隐藏拇指并仅允许通过按钮在滚动窗格中移动。在您的情况下,按钮不存在,因此不要让滚动窗格变得太小,否则您会失去滚动窗格的平移功能。

无论如何,这是一些示例代码:

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); }

}
Run Code Online (Sandbox Code Playgroud)