0
私の会社では、自動拡張可能なテキストフィールドを実装するタスクを持っています。 この機能はデフォルトでは提供されていないため、ゼロから開発する必要がありました。 Web上には多くの可能性がありますが、それはどのように実現できるのですか?誰もそのように働いていないので、コードをSOに入れることにしました。 解決策がTEXTAREAベースであるテキストフィールドを拡大するpossbileないので:JavaFx拡張可能テキストフィールドサンプル
public class TextFieldExpandable extends TextArea {
private final double DEFAULT_HEIGHT = 17.0;
public TextFieldExpandable() {
setMinHeight(DEFAULT_HEIGHT);
setPrefHeight(DEFAULT_HEIGHT);
setMaxHeight(DEFAULT_HEIGHT);
disableEnter();
}
@Override
protected void layoutChildren() {
super.layoutChildren();
setWrapText(true);
setPadding(new Insets(0, 0, 0, 0));
ScrollPane scrollPane = (ScrollPane)lookup(".scroll-pane");
scrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setPadding(new Insets(0, 0, 0, 0));
StackPane viewport = (StackPane) scrollPane.lookup(".viewport");
viewport.setPadding(new Insets(0, 0, 0, 0));
Region content = (Region) viewport.lookup(".content");
content.setPadding(new Insets(-1, 1, 0, 1));
Text text = (Text) content.lookup(".text");
text.textProperty().addListener((property) -> {
double textHeight = text.getBoundsInLocal().getHeight();
if (textHeight < DEFAULT_HEIGHT) {
textHeight = DEFAULT_HEIGHT;
}
textHeight = textHeight + 1;
setMinHeight(textHeight);
setPrefHeight(textHeight);
setMaxHeight(textHeight);
});
}
private void disableEnter() {
setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER) {
event.consume();
}
}
});
}
}
私はそれはあなたを助けます:)
を追加??? –
'Text Text = new Text(newValue);を追加しました。リスナー内部では 'textField.setPrefWidth(text.getBoundsInLocal()。getWidth()))'、リスナーの外側では 'textField.setMinWidth(100); TextFieldは拡大しますが、内部のStringは後方に展開されます。 – Sedrick