2017-10-29 9 views
0

VBoxにラベルを追加しました.VBoxはスクロールペインでさらにラップされています。そうすることで、私のスタイリングのラベルは機能しません。jfxでのスクロールペインでのスタイリングの問題

ここにコードがあります。スクロールペインを削除するとうまく動作します。

package javasocket; 

import javafx.fxml.FXML; 
import javafx.scene.control.Label; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.control.TextField; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.TextAlignment; 

public class Controller { 

    VBox msg_vbox = new VBox(); 

    @FXML 
    ScrollPane scrlpane; 

    @FXML 
    TextField message; 

    @FXML 
    protected void sendMessage() { 

     Label set_text = new Label(); 

     set_text.setText("Server Says: \n" + message.getText()); 


     set_text.setStyle("-fx-padding:10;-fx-margin:10;" 
       + "-fx-background-color:teal;" 
       + " -fx-background-insets: 5;" 
       + "-fx-font-size:15;" 
       + "-fx-background-radius: 3;"); 
     set_text.setPrefSize(Double.MAX_VALUE, Double.compare(0, 500)); 
       set_text.setWrapText(true); 
     set_text.setTextAlignment(TextAlignment.JUSTIFY); 
     msg_vbox.getChildren().addAll(set_text); 
     scrlpane.setContent(msg_vbox); 
     message.setText(""); 

    } 

    @FXML 
    protected void check_key(KeyEvent ae) { 

     if (ae.getCode().equals(KeyCode.ENTER)) { 
      sendMessage(); 
     } 
    } 
} 

出力はです。 enter image description here

+1

'-fx-margin'は、' Label'のCSSプロパティではありません。さらに、 'Double.compare(0、500)'を使って同じ値を計算するのではなく、 'Region.USE_COMPUTED_SIZE'を使うことをお勧めします。実際の問題は、 'prefWidth'を' Double.MAX_VALUE'に設定することです。おそらく、 'Label'の' MaxWidth'を 'Double.MAX_VALUE'に設定し、' ScrollPane'の 'fitToWidth'を'true'(コンテンツ幅をビューポートの幅に設定することで水平スクロールバーを避ける) – fabian

+0

ありがとう@fabian。私はそれを感謝します。私はRegion.USE_COMPUTED_SIZEの手がかりを得ることができます。 –

答えて

0

自分自身で答えを得ました。 Fabianに特別な感謝をします。

package javasocket; 

import javafx.fxml.FXML; 
import javafx.scene.control.Label; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.control.TextField; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.Region; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.TextAlignment; 

public class Controller { 

    VBox msg_vbox = new VBox(); 

    @FXML 
    ScrollPane scrlpane; 

    @FXML 
    TextField message; 

    @FXML 
    protected void sendMessage() { 

     //new label text with message. 
     Label set_text = new Label(); 
     set_text.setText("Server Says: \n" + message.getText()); 
     set_text.setStyle("-fx-padding:10;" 
       +"-fx-width:100%;" 
       + "-fx-background-color:teal;" 
       + " -fx-background-insets: 5;" 
       + "-fx-font-size:15;" 
       + "-fx-background-radius: 3;"); 

     set_text.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE); 
     set_text.setWrapText(true); 
     set_text.setTextAlignment(TextAlignment.JUSTIFY); 
     set_text.setPrefWidth(600); 


     //VBox wrapper 
     msg_vbox.getChildren().addAll(set_text); 
     msg_vbox.setPrefWidth(600); 

     //Further wrapped by ScrollPane 
     scrlpane.fitToHeightProperty(); 
     scrlpane.setContent(msg_vbox); 
     scrlpane.vvalueProperty().bind(msg_vbox.heightProperty()); //sets the scroll view to new element. 
     message.setText(""); 



    } 

    @FXML 
    protected void check_key(KeyEvent ae) { 

     if (ae.getCode().equals(KeyCode.ENTER)) { 
      sendMessage(); 
     } 
    } 
} 
関連する問題