我试图在TabPane中的标签之间设置不同的宽度,但我无法弄清楚如何?我想要大约3个左右的标签,这可能吗?
干杯!
答案 0 :(得分:0)
根据Jonny Henly的评论,我能够想出这个。我认为它符合您的描述。
您可以单独为Tab
设置样式,这样您就可以循环浏览TabPane
附带的所有标签,并在每个第n个标签上设置特殊样式。
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class TabGroups extends Application {
@Override
public void start(Stage stage) {
TabPane tabPane = new TabPane();
Tab tab1 = new Tab("Tab 1");
tab1.setContent(new Rectangle(200.0d, 200.0d, Color.LIGHTGREEN));
Tab tab2 = new Tab("Tab 2");
tab2.setContent(new Rectangle(200.0d, 200.0d, Color.LIGHTSTEELBLUE));
Tab tab3 = new Tab("Tab 3");
tab3.setContent(new Rectangle(200.0d, 200.0d, Color.LIGHTCORAL));
Tab tabA = new Tab("Tab A");
tabA.setStyle("-fx-background-color: cornsilk;");
tabA.setContent(new Circle(100.0d, 100.0d, 100.0d, Color.BLUE));
Tab tabB = new Tab("Tab B");
tabB.setStyle("-fx-background-color: cornsilk;");
tabB.setContent(new Circle(100.0d, 100.0d, 100.0d, Color.GREEN));
Tab tabC = new Tab("Tab C");
tabC.setStyle("-fx-background-color: cornsilk;");
tabC.setContent(new Circle(100.0d, 100.0d, 100.0d, Color.YELLOW));
Tab tabX = new Tab("Tab X");
tabX.setContent(new TextField("This is " + tabX.getText()));
Tab tabY = new Tab("Tab Y");
tabY.setContent(new TextField("This is " + tabY.getText()));
tabPane.getTabs().addAll(tab1, tab2, tab3, tabA, tabB, tabC, tabX, tabY);
ObservableList<Tab> theTabs = tabPane.getTabs();
// Add special CSS to every third tab.
String addedStyle = "-fx-background-insets: 0 5em 0 0, 1 5em 1 1, 2 5em 0 0;"
+ "-fx-padding: 0.083333em 5em 0.083333em 0.5em;";
int counter = 1;
for (Tab t : theTabs) {
if ((counter % 3) == 0) {
String existingStyle = t.getStyle();
String newStyle;
if (existingStyle != null) {
newStyle = existingStyle + addedStyle;
} else {
newStyle = addedStyle;
}
t.styleProperty().setValue(newStyle);
}
counter++;
}
tabPane.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
StackPane layout = new StackPane();
layout.getChildren().add(tabPane);
Scene scene = new Scene(layout);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
使用setStyle()
方法将完全替换选项卡上存在的任何样式,因此,根据程序的主题,您可能希望获取现有样式并将任何更改附加到结尾。 (属性的最后一个设置会覆盖任何更早的内容。例如,样式可能会在属性列表的早期将背景设置为黑色,但稍后在列表中将其更改为白色将覆盖先前的设置。)此外,我不是CSS专家和下面使用的样式是有问题的,因为每个第三个选项卡的右边缘和下边缘都搞砸了。此外,第二个和第三个标签之间的间距混乱了。
希望有所帮助。