2017-03-27 4 views
-1

정수를 변경하면 포함 된 텍스트의 위치가 변경됩니다. 당신이 숫자가 75 때 쓸모가있다, 사진에서 볼 수 있듯이텍스트를 고정 위치로 설정하면 어떻게 확대시킬 수 있습니까?

Stage priceStage = new Stage(); 
priceStage.setResizable(false); 
priceStage.setWidth(450); 
priceStage.setHeight(450); 
priceStage.setTitle(windowTitle); 

IntegerProperty price, maxIncome, adLevel; 

price = new SimpleIntegerProperty(priceDifference); 
maxIncome = new SimpleIntegerProperty(); 
adLevel = new SimpleIntegerProperty(1); 
Button goButton = new Button("Организовать!"); 

Text assignPriceText = new Text(" Цена на одного студента: "); 
assignPriceText.setFont(Font.font("Arial", FontWeight.BOLD, 30)); 

Text plus = new Text("+"); 
Text minus = new Text("-"); 
Text priceInfo = new Text(); 

Text priceText = new Text(); 
Text studentsAmmountText = new Text(); 
Text maxIncomeText = new Text(); 
Text adLevelText = new Text(); 

priceText.textProperty().bind(price.asString("%d $")); 
studentsAmmountText.textProperty().bind(studentsAmmount.asString("\nКоличество студентов: %d")); 
maxIncomeText.textProperty().bind(maxIncome.asString("\nДоход: %d $")); 
adLevelText.textProperty().bind(adLevel.asString("\nРеклама: %d %% \n")); 

TextFlow priceTextFlow = new TextFlow(minus, priceText, plus, studentsAmmountText, maxIncomeText, adLevelText); 
priceTextFlow.setPadding(new Insets(0,0,0,50)); 

plus.setFill(Color.RED); 
minus.setFill(Color.RED); 

plus.setFont(Font.font(80)); 
minus.setFont(Font.font(80)); 
priceText.setFont(Font.font(100)); 
studentsAmmountText.setFont(Font.font(30)); 
maxIncomeText.setFont(Font.font(30)); 
adLevelText.setFont(Font.font(30)); 
goButton.setFont(Font.font(30)); 

: 나는 그것이 여기에 5로 동일하더라도 INT는 100 같을 때 같은 위치에있을 것을 원하는 내 코드입니다 빨간 선으로 표시된 공간. 그러나 숫자가 100 일 때는 완벽하게 중앙에 위치합니다. 그렇다면 숫자가 바뀌면 텍스트가 자동으로 위치를 변경하도록하려면 어떻게해야합니까?

enter image description here 마지막으로 enter image description here

+1

StackPane을 사용하십시오. StackPane에 레이블을 추가하십시오. 이 경우 TextFlow를 StackPane에 추가해야하는 것처럼 보입니다. StackPane 너비를 부모의 너비 (부모 너비에 바인딩 된 너비)와 같게 만들 수 있다고 생각합니다. 그런 다음 TextFlow 너비가 StackPane의 최소 너비보다 작게 설정하십시오. – Sedrick

답변

0

, 나는 해결책 발견 :

price.addListener((c, o, n)->{ 
    space.setPrefWidth(120-30*String.valueOf(n).length()); 
}); 

나는 가격에 리스너를 추가 한 (텍스트가 아닌,하지만 IntegerProperty)과 매번 새로운 자리에 추가가있을 때 숫자, 공간 (지역)은 새 자리의 크기만큼 줄어 듭니다. 그것은 30입니다. 그래서 길이를 정의하기 위해 새로운 숫자를 문자열로 변환 한 다음 30을 배수로하여 공간을 줄입니다.