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

私はそれはあなたを助けます:)

答えて

-1

テキストフィールドのリスナーにPrefWidthを設定することができます願っています。

//あなたは10文字で、テキストフィールドが10個のピクセルの幅になりたいのリスナー

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

を追加??? –

+0

'Text Text = new Text(newValue);を追加しました。リスナー内部では 'textField.setPrefWidth(text.getBoundsInLocal()。getWidth()))'、リスナーの外側では 'textField.setMinWidth(100); TextFieldは拡大しますが、内部のStringは後方に展開されます。 – Sedrick

関連する問題