2017-10-29 40 views
0

我已經爲VBox添加了一個標籤,該標籤由Scrollpane進一步包裝。這樣做,我的標籤樣式不起作用。使用Scrollpane 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屬性。 Furhermore我推薦使用'Region.USE_COMPUTED_SIZE'而不是計算使用'Double.compare(0,500)'的相同值。這裏真正的問題是將'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(); 
     } 
    } 
}