Anonymous
Теги JavaFX не переносятся
Сообщение
Anonymous » 25 сен 2024, 19:05
Привет всем, мне нужна помощь, чтобы мое приложение тегов работало должным образом. В настоящее время он отображает такие значения:
Однако я хочу, чтобы теги переносились, а не оставались горизонтальными. Я заменил все 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79023126/javafx-tags-not-wrapping[/url]
1727280340
Anonymous
Привет всем, мне нужна помощь, чтобы мое приложение тегов работало должным образом. В настоящее время он отображает такие значения: [img]https://i.sstatic.net/JfHTq892.png[/img] Однако я хочу, чтобы теги переносились, а не оставались горизонтальными. Я заменил все HBox на FlowPane, но это выглядело странно и не работало. Я также пробовал использовать VBox, но все равно все портится. Я хочу, чтобы это выглядело так: [img]https://i.sstatic.net/HlICqQyO.png[/img] Текущий код: [code]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 Подробнее здесь: [url]https://stackoverflow.com/questions/79023126/javafx-tags-not-wrapping[/url]