JavaFX TabPane 宽度和 Button 宽度不匹配
JavaFX TabPane width and Button width don´t match
当我尝试在 JavaFX 中使用 TabPane
容器时,我注意到,如果我给 TabPane
中的 Tabs 一个特定的宽度和另一个元素,例如Button
完全相同的宽度,它们以不同的尺寸显示在屏幕上。
这是一个例子:As you can see in this image, the Button is smaller than the width of the tap
这是此特定图像的代码 I:
package Whosebug;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TabPane.TabClosingPolicy;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TabPaneMystery extends Application {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
StackPane stackPane = new StackPane();
Scene scene = new Scene(stackPane, 600, 400);
stage.setScene(scene);
stage.show();
TabPane tabPane = new TabPane();
stackPane.getChildren().add(tabPane);
Tab tab1 = new Tab();
tabPane.setTabMaxWidth(160); //The width of the tab is '160'
tabPane.setTabMinWidth(160);
tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);
tab1.setText("Tab");
tabPane.getTabs().add(tab1);
Button b = new Button();
b.setText("Button");
b.setPrefWidth(160); //The width of the button is '160'
b.setTranslateX(6);
tab1.setContent(b);
}
}
在第 33 行和第 34 行 (第一条评论所在的位置) 我将 tapPane 的宽度设置为 160
,在第 42 行 (第二条评论在哪里) 我设置的宽度完全一样
这导致显示的图像。
我的问题是:
我犯了一个明显的错误还是某种错误,或者编译器对每个节点的宽度的解释是否有所不同?
我怀疑您在 Tab
中看到了一些填充。 Tab
的实际宽度为 170
。您可以通过将 Tab
的宽度更改为 150
来确认这一点;然后它将与 Button
:
的大小完全相同
您也可以使用 CSS 删除填充:
tab1.setStyle("-fx-padding: 0");
不过,正如您在下面看到的那样,它不是完全匹配的,可能还有其他 CSS 属性需要研究。不过,希望这能让您更接近您的目标:
当我尝试在 JavaFX 中使用 TabPane
容器时,我注意到,如果我给 TabPane
中的 Tabs 一个特定的宽度和另一个元素,例如Button
完全相同的宽度,它们以不同的尺寸显示在屏幕上。
这是一个例子:As you can see in this image, the Button is smaller than the width of the tap
这是此特定图像的代码 I:
package Whosebug;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TabPane.TabClosingPolicy;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TabPaneMystery extends Application {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
StackPane stackPane = new StackPane();
Scene scene = new Scene(stackPane, 600, 400);
stage.setScene(scene);
stage.show();
TabPane tabPane = new TabPane();
stackPane.getChildren().add(tabPane);
Tab tab1 = new Tab();
tabPane.setTabMaxWidth(160); //The width of the tab is '160'
tabPane.setTabMinWidth(160);
tabPane.setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);
tab1.setText("Tab");
tabPane.getTabs().add(tab1);
Button b = new Button();
b.setText("Button");
b.setPrefWidth(160); //The width of the button is '160'
b.setTranslateX(6);
tab1.setContent(b);
}
}
在第 33 行和第 34 行 (第一条评论所在的位置) 我将 tapPane 的宽度设置为 160
,在第 42 行 (第二条评论在哪里) 我设置的宽度完全一样
这导致显示的图像。
我的问题是:
我犯了一个明显的错误还是某种错误,或者编译器对每个节点的宽度的解释是否有所不同?
我怀疑您在 Tab
中看到了一些填充。 Tab
的实际宽度为 170
。您可以通过将 Tab
的宽度更改为 150
来确认这一点;然后它将与 Button
:
您也可以使用 CSS 删除填充:
tab1.setStyle("-fx-padding: 0");
不过,正如您在下面看到的那样,它不是完全匹配的,可能还有其他 CSS 属性需要研究。不过,希望这能让您更接近您的目标: