2017-05-23 1 views
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(); 
    } 
    } 
}); 
} 
} 

나는 희망이 당신을 도와줍니다 :

답변

-1

텍스트 필드의 리스너에 PrefWidth을 설정할 수 있습니다.

//

'textField.textProperty().addListener(new ChangeListener<String>() { 
    @Override 
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
     textField.setPrefWidth(textField.getText().length()); 
    } 
});' 
+0

당신은 10 개 픽셀 폭으로 10 개 문자 텍스트 필드를 원하는 청취자 추가 ??? –

+0

'Text text = new Text (newValue);를 추가했습니다. 청취자 내부 및 청취자 외부의'textField.setMinWidth (100); '와 같은 형식의 텍스트 파인더를 가져올 수 있습니다. TextField는 커지지 만 내부의 String은 뒤로 확장됩니다. – Sedrick