
Однако я хочу, чтобы теги переносились, а не оставались горизонтальными. Я заменил все HBox на FlowPane, но это выглядело странно и не работало. Я также пробовал использовать VBox, но все равно все портится.
Я хочу, чтобы это выглядело так:

Текущий код:
package application;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.collections.ObservableSet;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Side;
import javafx.stage.Stage;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.CustomMenuItem;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
public class Main3 extends Application{
Color txtColor;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("TagInputFx Demo");
VBox root = new VBox();
AutocompleteMultiSelectionBox tagInput = new AutocompleteMultiSelectionBox();
ObservableSet sug = FXCollections.observableSet();
String[] listOfDBCalls = "Integrated Security=, user=, password=, pwd=, Database=, Encrypt=, Trusted_Connection=, Persist Security Info=, TrustServerCertificate=, User ID=, Initial Catalog=, AttachDbFileName=, Failover Partner=, Asynchronous Processing=, User Instance=, Packet Size=, Column Encryption Setting=, Network Library=, MultipleActiveResultSets=, Data Source=, Server=, Enclave Attestation Url=, Provider=, UID=, Connect Timeout=, Driver=, MARS_Connection=, Proxy Password=, Proxy User Id=, Host=, Pooling=, Max Pool Size=, Connection Lifetime=, Incr Pool Size=, Decr Pool Size=, DBA Privilege=, Load Balancing=, Dbq=, DistribTX=, OledbKey1=, OledbKey2=, ConnectString=, Version=, New=, UseUTF16Encoding=, Legacy Format=, Read Only=, DateTimeFormat=, BinaryGUID=, Cache Size=, Page Size=, Enlist=, Max Page Count=, Journal Mode=, Synchronous=, Compress=, UTF8Encoding=, Timeout=, NoTXN=, SyncPragma=, StepAPI=, LongNames=, Port=, location=, sslmode=, Protocol=, SslMode=, MinPoolSize=, MaxPoolSize=".split(",");
for (String call : listOfDBCalls) {
sug.add(call);
}
tagInput.setSuggestions(sug);
tagInput.setTextColor(Color.BLACK);
Text header = new Text("Tags:");
root.getChildren().addAll(header, tagInput);
Scene scene = new Scene(root, 600, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main3(String[] args) {
launch(args);
}
public class AutocompleteMultiSelectionBox extends HBox {
private final ObservableList tags;
private final ObservableSet suggestions;
private ContextMenu entriesPopup;
private static final int MAX_ENTRIES = 15;
private final TextField inputTextField;
public AutocompleteMultiSelectionBox() {
getStyleClass().setAll("tag-bar");
getStylesheets().add(getClass().getResource("application.css").toExternalForm());
tags = FXCollections.observableArrayList();
suggestions = FXCollections.observableSet();
inputTextField = new TextField();
this.entriesPopup = new ContextMenu();
setListner();
inputTextField.setOnKeyPressed(event -> {
if (event.getCode().equals(KeyCode.BACK_SPACE) && !tags.isEmpty() && inputTextField.getText().isEmpty()) {
String last = tags.get(tags.size() - 1);
String orgTag = last.split("=")[0] + "=";
if (orgTag.length() > 2) {
suggestions.add(orgTag);
tags.remove(last);
}
} else if (event.getCode().toString() == "ENTER" || event.getCode().toString() == "TAB" && !inputTextField.getText().isEmpty()) {
String newTag = inputTextField.getText();
String orgTag = newTag.split("=")[0] + "=";
if (orgTag.length() > 2) {
suggestions.add(newTag);
tags.add(newTag);
inputTextField.setText("");
suggestions.remove(orgTag);
suggestions.remove(newTag);
}
} else if (event.getCode().toString() == "ESCAPE") {
inputTextField.clear();
} else if (event.getCode().toString() == "DOWN" || event.getCode().toString() == "UP") {
entriesPopup.getSkin().getNode().lookup(".menu-item").requestFocus();
}
System.out.println(event.getCode().toString());
});
inputTextField.prefHeightProperty().bind(this.heightProperty());
HBox.setHgrow(inputTextField, Priority.ALWAYS);
inputTextField.setBackground(null);
tags.addListener((ListChangeListener.Change
Подробнее здесь: https://stackoverflow.com/questions/790 ... t-wrapping
Мобильная версия