2015-01-09 4 views
1

그리드 패널에 동일한 (최대) 너비의 버튼이 있기를 원합니다.JavaFX : 사용자 정의 그리드 패널의 버튼 너비

FXML로 직접 설정하려고 할 때 완벽하게 작동합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.layout.*?> 
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="TestController"> 
    <children> 
     <GridPane AnchorPane.leftAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.bottomAnchor="0" 
        AnchorPane.topAnchor="0"> 
      <columnConstraints> 
       <ColumnConstraints hgrow="SOMETIMES" percentWidth="50.0"/> 
       <ColumnConstraints hgrow="SOMETIMES" percentWidth="50.0"/> 
      </columnConstraints> 
      <children> 
       <Button maxWidth="Infinity" text="Button1" GridPane.columnIndex="0"/> 
       <Button maxWidth="Infinity" text="Button2" GridPane.columnIndex="1"/> 
      </children> 

     </GridPane> 
    </children> 
</AnchorPane> 

그러나 전체 표를 사용자 지정 컨트롤로 분리하려고하면 단추가 사용 가능한 너비를 채우기 위해 멈췄습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.layout.*?> 
<?import CustomGridPane?> 
<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="TestController"> 
    <children> 
     <CustomGridPane AnchorPane.leftAnchor="0" AnchorPane.rightAnchor="0" AnchorPane.bottomAnchor="0" AnchorPane.topAnchor="0"> 
     </CustomGridPane> 
    </children> 
</AnchorPane> 

그리고 확장 :

public class CustomGridPane extends GridPane { 

    private Button button1 = new Button("button1"); 
    private Button button2 = new Button("button2"); 

    public CustomGridPane() { 
     super(); 
     button1.maxWidth(Double.MAX_VALUE); 
     button2.maxWidth(Double.MAX_VALUE); 

     getColumnConstraints().add(new ColumnConstraints()); 
     getColumnConstraints().add(new ColumnConstraints()); 
     getColumnConstraints().get(0).setPercentWidth(50); 
     getColumnConstraints().get(0).setHgrow(Priority.SOMETIMES); 
     getColumnConstraints().get(1).setPercentWidth(50); 
     getColumnConstraints().get(1).setHgrow(Priority.SOMETIMES); 

     add(button1, 0, 0); 
     add(button2, 1, 0); 
    } 
} 

내가 모르는 뭔가가 여기에

은 FXML입니까?

답변

3

setMaxWidth (setter) 메서드 대신 maxWidth 속성 getter를 사용하고 있습니다.

은이 노드의 최대 폭을 결정하기 위해 레이아웃시 호출 버튼의 문서 here

공공 최종 이중의 maxWidth (더블 높이)

참조하십시오. 응용 프로그램이 maxWidth 속성을 설정하여 최대 너비를 초과하지 않는 한 computeMaxWidth (forHeight)에서 값을 반환합니다.

은 이러한 것들에 의해의 maxWidth (...)로 두 줄을 바꾸기 :

button1.setMaxWidth(Double.MAX_VALUE); 
    button2.setMaxWidth(Double.MAX_VALUE); 
+1

예, 그렇게 분명하다. 나는 오랫동안 그것을 쳐다 보았고 그것을 알아 채지 못했다고 믿을 수 없다. 고마워. – wlek