我觉得这可能是一个简单修复的问题,或者我错过了一些明显的东西。我生疏了(几年后又回到了一些休闲编程中),我一辈子都无法弄清楚。
我有一堆按钮,我想保持较小,但由于按钮边框和文本本身之间的插图,文本总是被截断。我将如何减少这些插图以使文本更接近按钮的边框?我正在使用 SceneBuilder,它没有更改它们的选项,我发现唯一可以做到这一点的选项是灰色的。
我一直在网上寻找答案,但找不到答案,因为插图和按钮有很多关系。任何帮助将不胜感激!〜
编辑:因此,这将创建一个截断文本的按钮,即使该文本适合按钮(如果不是按钮内的插图)。我希望能澄清一些事情,抱歉,这个网站还很新。~
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button layoutX="274.0" layoutY="188.0" maxHeight="24.0" maxWidth="24.0" minHeight="24.0" minWidth="24.0" mnemonicParsing="false" prefHeight="24.0" prefWidth="24.0" text="NW" />
</children>
</Pane>
这个答案解决了我认为您的主要问题,即如何调整按钮填充。
我确信您可能还有其他问题,因为此答案不太可能回答您所有相关的疑问,但是,如果是这样,最好将它们作为新问题提出。
这可以通过 CSS 来完成。
正如 Slaw 在评论中指出的:
默认的应用程序范围用户代理样式表 (
) 提供按钮填充。modena.css
您可以通过将 padding 属性设置为其他值(也许为零?)来覆盖它。
在代码中,你可以这样写:
unpaddedButton.setStyle("-fx-padding: 0px");
但最好应用 CSS 样式表:
.unpadded {
-fx-padding: 0px;
}
然后输入代码:
unpaddedButton.getStyleClass().add("unpadded");
或者,如果您想取消应用程序中的所有按钮(不太可能),您可以只使用样式表。
.button {
-fx-padding: 0px;
}
您可以将其限制为某个自定义窗格,以对自定义窗格中的所有按钮进行样式设置,方法是将“自定义窗格”样式类(或您想要的任何其他名称)应用于包含您想要设置样式的所有按钮的布局窗格。
.custom-pane > .button {
-fx-padding: 0px;
}
要将其应用到带有场景生成器的 FXML,您可以将自定义 CSS 样式表与场景生成器中的 FXML 相关联,然后应用该样式。从场景生成器使用 CSS 样式表的过程记录在 Oracle Scene Builder 指南中(Oracle 文档已过时,但在这方面仍然相关)。
这个基本示例使用内联样式从按钮中删除填充。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.io.IOException;
public class ButtonPaddingApp extends Application {
@Override
public void start(Stage stage) throws IOException {
Button paddedButton = new Button("Padded");
Button unpaddedButton = new Button("Unpadded");
unpaddedButton.setStyle("-fx-padding: 0px");
VBox layout = new VBox(10, paddedButton, unpaddedButton);
layout.setPadding(new Insets(20));
stage.setScene(new Scene(layout));
stage.show();
}
}