2013-02-17 111 views
1

我正在使用BorderPane,其中右側區域未使用。在中心區域,我有一個帶有帆布的HBox,另一個控件例如一個按鈕。我想畫布具有相同的寬度和高度的確定Canvas可以增長到的最大尺寸?

Canvas width and height = minimum{maximum possible Canvas height, maximum possible Canvas width} 

的值(即:帆布應該是一個正方形)

我的問題是:如何確定的最大寬度和帆布可以長到的最大高度?

這裏是我的FXML:

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <bottom> 
    <Label text="Bottom area" /> 
    </bottom> 

    <center> 
    <HBox> 
     <children> 
     <Canvas width="300" height="300" /> 
     <Button mnemonicParsing="false" text="some button next to the Canvas" /> 
     </children> 
    </HBox> 
    </center> 

    <left> 
    <Button mnemonicParsing="false" text="Left area"/> 
    </left> 

    <top> 
    <MenuBar> 
     <menus> 
     <Menu mnemonicParsing="false" text="File"> 
      <items> 
      <MenuItem mnemonicParsing="false" text="Close" /> 
      </items> 
     </Menu>  

     </menus> 
    </MenuBar> 
    </top> 

</BorderPane> 

感謝您的任何提示!

+0

我的JavaFX的經驗,一個微小的量,但似乎因爲你給了borderpane無限尺寸長成,因此您的中心區域(和你的畫布)可以無限擴展你在談論*可見*大小?然後這可能會有所幫助:http://stackoverflow.com/questions/12837592/how-to-scroll-to-make-a-node-within-the-content-of-a-scrollpane-visible – markE 2013-02-17 18:00:54

回答

0

我可以看到這個正在做最簡單的方法是:canvas.getwidth()和canvas.getHeight()

+2

如果我請糾正我我錯了,但據我所知我手動設置一個畫布大小,否則它是0. getWidth()只返回我以前設置的,而不是最大可能的大小): – 2013-02-17 16:43:52

0

您必須手動添加的畫布,在GUI建成後,這樣你就可以計算出它的尺寸:

public class YourController implements Initializable { 

    @FXML HBox mHBox; 
    @FXML Button mButton; 

    @Override 
    public void initialize(final URL paramURL, final ResourceBundle paramResourceBundle) { 
     Platform.runLater(new Runnable() { public void run() { 
      double w0 = mHBox.getWidth(); 
      double w1 = mButton.getWidth(); 
      double h0 = mHBox.getHeight(); 
      double size = Math.min(w0-w1, h0); 
      Canvas canvas = new Canvas(size, size); 
      mHBox.getChildren().add(0, canvas); 
     }}); 
    } 
} 

與畫布的問題是,是不是可以調整大小:(