2016-07-31 38 views
0

Ich habe versucht, die TextArea- wächst mit seinem Inhalt zu machen, für exmaple:JavaFX - Machen Sie TextArea- mit Textheight wachsen (Zeilen/Linien)

Es gibt eine Zeile im Textbereich, jetzt der Benutzer hält das Schreiben und erreicht den rechten Rand des TextArea und die Zeilenumbrüche, jetzt hat er eine zweite Zeile (die nicht umschlossen wird, indem man intern einfach '\ n' benutzt) und ich möchte nun, dass das Textfeld um eine Zeile größer wird.

Was ich schon versucht:

Diese

Text text = textArea.lookup(".text").getLocalBounds.getHeight() 

liefert immer das gleiche, egal wie viele Linien habe mich.

Diese

textArea.getPrefRowCount() 

gibt immer

egal wie viele Linien habe mich.

Hat jemand eine Idee, wie man das erreicht? Wenn jemand ein funktionierendes Beispiel möchte, hat Skype diesen Mechanismus in seinem Chat.

Grüße Marcel

+0

Haben Sie [TextArea.wrapText] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextArea.html#wrapTextProperty) getestet? – mojtab23

+0

Ich wickle den Text bereits ein, aber das hat nichts mit der Textareasize zu tun, ich möchte die Höhe nicht ändern die Breite – ScriptKiddy

Antwort

0

Diese

Text text = (Text) textArea.lookup(".text"); 
textArea.setPrefHeight(text.boundsInParentProperty().get().getMaxY()); 

funktioniert, aber ist nicht sehr schön, da die Bildlaufleisten nerven halten.

-1

Sollte nicht zu schwer sein, es zu tun. Ich denke, Sie müssen wahrscheinlich @Override die setPreferredRowCount() Methode von textArea die Anzahl der Zeilen basierend auf was Sie benötigen, oder auf einen festen Wert zurückgeben.

Dies ist ein gemeinsames „Thema“ u auf jede Swing Komponente wie JFrame, JPanel, JLabel, JButton begegnen kann, usw.

Auch auf diesen Komponenten auch ist es sehr die bevorzugt Methoden empfohlen, um außer Kraft zu setzen, sie richtig zu skalieren , anstatt setBounds zu verwenden.

Auch vielleicht die setPreferredRowCount() Methode wird nicht selbst aktualisieren, so dass Sie wahrscheinlich in einer Schleife (oder einem Thread, aber ich würde es lieber nicht), um sicherzustellen, dass Ihre Größen immer aktualisiert werden. Etwas wie:

EDIT:

while(inputNeeded) { 
    if(textArea1.textChanged) { 
     if(text1.length > 10) { 
      textArea1.setPreferredRowCount(3); 
     } else if(text1.length > 20) { 
      textArea1.setPreferredRowCount(4); 
     } 
    } 
} 

... und so weiter. Mein Nachteil, du musst nichts wirklich außer Kraft setzen. Versuchen Sie einfach, eine Schleife wie diese zu verwenden.

+0

Ich bin nicht wirklich sicher, was ich tun muss nach dem, was Sie gerade gesagt haben. – ScriptKiddy

+0

SetPreferedRowCounts nimmt eine ganze Zahl als Argument, ich war nicht, dass tief in Java nicht zu viel über das Chasing der Kern der Komponenten wissen – ScriptKiddy

+0

Ja, das ist richtig, ich werde Post jetzt bearbeiten. –