0
우리 회사에서 자동 확장 가능한 텍스트 필드를 구현하는 작업이 있습니다. 이 기능은 기본적으로 제공되지 않으므로 처음부터 다시 개발해야했습니다. 웹 전반에 걸쳐 많은 가능성이 있습니다. 어떻게 달성 할 수 있습니까? 그렇지만 아무도 다른 사람들을 위해 일하지 않았습니다. 따라서 우리는 코드를 SO에두기로 결정 했으므로 다른 개발자도 사용할 수 있습니다. 이 솔루션은 텍스트 영역을 기반으로하는 텍스트 필드 확장 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();
}
}
});
}
}
나는 희망이 당신을 도와줍니다 :
당신은 10 개 픽셀 폭으로 10 개 문자 텍스트 필드를 원하는 청취자 추가 ??? –
'Text text = new Text (newValue);를 추가했습니다. 청취자 내부 및 청취자 외부의'textField.setMinWidth (100); '와 같은 형식의 텍스트 파인더를 가져올 수 있습니다. TextField는 커지지 만 내부의 String은 뒤로 확장됩니다. – Sedrick