答案演示:(答案为5月29日上午3:10)
**10/7/2016** you can find the code on
GitHub
Actual Question before answered:(asked May 22 at 19:53)
The title might be not too great but what I want to do is something like this
in JavaFX:
Question: 我不需要为此写代码。相反,我想
知道如何使用JavaFX和一些想法来实现这一目标。
对于标签,您可以使用HBox
包含Text
(标签名称)节点和Button
(删除按钮(X))节点的自定义样式。通过玩转
背景和边框,可以获得所需的标签外观。
onAction按钮的处理程序应从其父项中移除标签。
对于整个标签栏,您可以使用另一个HBox。使用适当的边框以获得正确的外观。除了标签添加一个TextField没有
背景的最后一个元素,并设置Hgrow的那个属性TextField
,以Priotity.ALWAYS
覆盖可用空间的其余部分。
此onAction处理程序TextField添加新标签并清除的内容TextField
。
您可以例如将ControlsFX的自动完成功能与一起使用,TextField
也可以自行实现以实现自定义外观…
public class TagBar extends HBox {
private final ObservableList<String> tags;
private final TextField inputTextField;
public ObservableList<String> getTags() {
return tags;
}
public TagBar() {
getStyleClass().setAll("tag-bar");
getStylesheets().add(getClass().getResource("style.css").toExternalForm());
tags = FXCollections.observableArrayList();
inputTextField = new TextField();
inputTextField.setOnAction(evt -> {
String text = inputTextField.getText();
if (!text.isEmpty() && !tags.contains(text)) {
tags.add(text);
inputTextField.clear();
}
});
inputTextField.prefHeightProperty().bind(this.heightProperty());
HBox.setHgrow(inputTextField, Priority.ALWAYS);
inputTextField.setBackground(null);
tags.addListener((ListChangeListener.Change<? extends String> change) -> {
while (change.next()) {
if (change.wasPermutated()) {
ArrayList<Node> newSublist = new ArrayList<>(change.getTo() - change.getFrom());
for (int i = change.getFrom(), end = change.getTo(); i < end; i++) {
newSublist.add(null);
}
for (int i = change.getFrom(), end = change.getTo(); i < end; i++) {
newSublist.set(change.getPermutation(i), getChildren().get(i));
}
getChildren().subList(change.getFrom(), change.getTo()).clear();
getChildren().addAll(change.getFrom(), newSublist);
} else {
if (change.wasRemoved()) {
getChildren().subList(change.getFrom(), change.getFrom() + change.getRemovedSize()).clear();
}
if (change.wasAdded()) {
getChildren().addAll(change.getFrom(), change.getAddedSubList().stream().map(Tag::new).collect(Collectors.toList()));
}
}
}
});
getChildren().add(inputTextField);
}
private class Tag extends HBox {
public Tag(String tag) {
getStyleClass().setAll("tag");
Button removeButton = new Button("X");
removeButton.setOnAction((evt) -> tags.remove(tag));
Text text = new Text(tag);
HBox.setMargin(text, new Insets(0, 0, 0, 5));
getChildren().addAll(text, removeButton);
}
}
}
.tag-bar {
-fx-border-color: blue;
-fx-spacing: 3;
-fx-padding: 3;
-fx-max-height: 30;
}
.tag-bar .tag {
-fx-background-color: lightblue;
-fx-alignment: center;
}
.tag-bar .tag .button {
-fx-background-color: transparent;
}
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Sort");
StackPane.setAlignment(btn, Pos.BOTTOM_CENTER);
TagBar tagBar = new TagBar();
btn.setOnAction((ActionEvent event) -> {
FXCollections.sort(tagBar.getTags());
});
Button btn2 = new Button("add \"42\"");
btn2.setOnAction(evt -> {
if (!tagBar.getTags().contains("42")) {
tagBar.getTags().add("42");
}
});
VBox root = new VBox();
root.getChildren().addAll(tagBar, btn, btn2);
root.setPrefSize(300, 400);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
主要内容:创建标签,标签内容,标签字体,包装文本,应用效果,标签鼠标事件,更新标签JavaFX API的包中的类可用于显示一个文本元素。 我们可以包装文本元素以适应特定空间,添加图形图像或使用JavaFX 控件应用视觉效果。 以下代码显示如何使用显示文本。 创建标签 JavaFX API提供了类的三个构造函数来创建标签。 标签内容 创建标签后,我们可以使用类中的以下方法添加文本和图形内容。 - 设置标签的文本标题 - 设置图形图标 方法设置文本和图标之间的间距。方法设置标签文本
问题内容: 我需要帮助弄清楚如何在程序中显示文本,以便它可以在我创建的多边形形状的中间显示“停止”。我想做的是创建一个停车标志。我已经负责创建和显示该停车标志,因此现在只需要在屏幕上显示“停止”即可 } 问题答案: 更换用,并添加到它(多边形后): 关于的Javadoc : StackPane将其子级放在从后到前的堆栈中。子级的z顺序由子级列表的顺序定义,第0个子级是底部,最后一个子级在顶部。如果
我在vBox中有5个标签。我想创建一个方法来跟踪我单击的标签。现在,我使用5种方法,每个标签一种。我需要找个倾听者或其他什么吗?这是我的程序片段。 我的fxml代码: 我的java方法:
我正在用JavaFX和JavaFX Scene Builder开发软件。 我有一个有2列的网格窗格。实际上,在每个单元格中都有标签。在表的第一列中,标签内的文本是默认常量,在第二列中,文本可以更改。 编辑: 多亏了@Fabian issues,这才解决了最初的问题。在addiction中,需要将每个元素的fx:id设置到场景构建器中。
我不明白为什么设置Label.setAlignment(Pos.CENTER_RIGHT)不会影响标签的对齐,然后将其添加到GridPane中?唯一的方法似乎是通过网格(例如列约束)或将标签添加到具有正确对齐的HBox。 为什么将标签的对齐方式设置为CENTER_RIGHT不起作用?我可以看到API说:“指定当标签中有空白时,标签中的文本和图形应该如何对齐。但是,如何在标签中获取空白区域?
我有一个问题,我真的不知道如何在JavaFX中将多行添加到Label中。 例如: 因此,当循环结束时,标签仅显示最终值9。 因此,任何可以显示所有数字1-9并在它们之间加上断线(例如'\n')的解。 当我想显示包含许多菜肴的项目账单时,会出现这个问题。谢谢你的帮助。