2016-03-11 3 views
1

У меня есть следующий код FXMLjavafx8 изменение размера не растет и не уменьшается

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

<?import javafx.scene.*?> 
<?import javafx.scene.canvas.*?> 
<?import org.cornova.javafx.*?> 
<?import java.lang.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<SplitPane dividerPositions="0.5" maxHeight="Infinity" maxWidth="Infinity" minHeight="0" minWidth="0" orientation="VERTICAL" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.cornova.javafx.PanController"> 
    <items> 
     <HBox prefHeight="246.0" prefWidth="603.0"> 
     <children> 
      <VBox HBox.hgrow="ALWAYS"> 
       <children> 
        <StackPane fx:id="stackPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="165.0" prefWidth="570.0"> 
        <children> 
         <ResizableCanvas fx:id="spectrum" height="195.0" width="573.0" StackPane.alignment="TOP_LEFT" /> 
        </children> 
        </StackPane> 
        <ResizableCanvas fx:id="freqScale" height="10.0" width="570.0" VBox.vgrow="NEVER" /> 
       </children> 
      </VBox> 
      <ResizableCanvas fx:id="dbmScale" height="195.0" width="30.0" HBox.hgrow="NEVER" /> 
     </children> 
     </HBox> 
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" /> 
    </items> 
</SplitPane> 

Я пара, что со следующим контроллером

/* 
* Here comes the text of your license 
* Each line should be prefixed with * 
*/ 
package org.cornova.javafx; 

/** 
* Sample Skeleton for 'PanView.fxml' Controller Class 
*/ 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.scene.layout.StackPane; 
import org.cornova.javafx.ResizableCanvas; 

public class PanController { 

    @FXML // ResourceBundle that was given to the FXMLLoader 
    private ResourceBundle resources; 

    @FXML // URL location of the FXML file that was given to the FXMLLoader 
    private URL location; 

    @FXML // fx:id="stackPane" 
    private StackPane stackPane; // Value injected by FXMLLoader 

    @FXML // fx:id="spectrum" 
    private ResizableCanvas spectrum; // Value injected by FXMLLoader 

    @FXML // fx:id="freqScale" 
    private ResizableCanvas freqScale; // Value injected by FXMLLoader 

    @FXML // fx:id="dbmScale" 
    private ResizableCanvas dbmScale; // Value injected by FXMLLoader 

    @FXML // This method is called by the FXMLLoader when initialization is complete 
    void initialize() { 
     assert stackPane != null : "fx:id=\"stackPane\" was not injected: check your FXML file 'PanView.fxml'."; 
     assert spectrum != null : "fx:id=\"spectrum\" was not injected: check your FXML file 'PanView.fxml'."; 
     assert freqScale != null : "fx:id=\"freqScale\" was not injected: check your FXML file 'PanView.fxml'."; 
     assert dbmScale != null : "fx:id=\"dbmScale\" was not injected: check your FXML file 'PanView.fxml'."; 

     spectrum.widthProperty().bind(stackPane.widthProperty()); 
     spectrum.heightProperty().bind(stackPane.heightProperty()); 
     freqScale.widthProperty().bind(stackPane.widthProperty()); 
     dbmScale.heightProperty().bind(stackPane.heightProperty()); 
     spectrum.widthProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("spectrum width changed from " + oldValue + " to " + newValue); 
     }); 
     spectrum.heightProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("spectrum height changed from " + oldValue + " to " + newValue); 
     }); 
     freqScale.widthProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("Freq scale width changed from " + oldValue + " to " + newValue); 
     }); 
     dbmScale.heightProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("dbm scale height changed from " + oldValue + " to " + newValue); 
     }); 

     stackPane.widthProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("stackpane width changed from " + oldValue + " to " + newValue); 
     }); 
     stackPane.heightProperty().addListener((observable, oldValue, newValue) -> { 
      System.out.println("stackpane height changed from " + oldValue + " to " + newValue); 
     }); 
    } 
} 

Учитывая эти два, как я помню, мой пример приложения

package org.cornova.portablesdr; 

import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.SplitPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author walt 
*/ 
public class PanadapterView extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     try { 
      URL url = getClass().getResource("/PanView.fxml"); 
      SplitPane root = (SplitPane)FXMLLoader.load(url); 
      Scene scene = new Scene(root, 600,400); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch (Exception e) { 
      Logger.getLogger(PanadapterView.class.getName()).log(Level.SEVERE, null, e); 
     } 
    } 

    public static void main(String[] args) { 
     launch(); 
    } 
} 

работал почти так, как я ожидал, кроме расширения окна только зашел так далеко, и я не мог сжать меня т, вообще. Я добавил слушателя изменений в vbox и hbox, и они оба выполняют правильно в отношении роста и усадки.

Две шкалы, которые я хочу зафиксировать на одной оси, HBox содержит VBox и resizableCanvas, как описано в FXControl. Он имеет фиксированную ширину и его высота сопрягается с высотой стека, дочерним VBox и родителем другого ResizableCanvas.

В текущем файле fxml я считаю, что стек стек должен быть в порядке по ширине, я могу расти и сокращать его просто отлично, но высота никогда не превышает 200, что я был вынужден использовать для prefHeight. Тем не менее, он может переопределить prefWidth.

На данный момент я как бы догадываюсь, что изменить дальше. Я действительно пытаюсь исследовать эту проблему. Далеко не повезло, ясно. Вот последний файл fxml.

<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 

<SplitPane dividerPositions="0.5" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="0" minWidth="0" orientation="VERTICAL" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.cornova.javafx.PanController"> 
    <items> 
     <HBox fx:id="hbox" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="0.0" minWidth="0.0"> 
     <children> 
      <VBox fx:id="vbox" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="0.0" minWidth="0.0" prefHeight="170.0" prefWidth="570.0" HBox.hgrow="ALWAYS"> 
       <children> 
        <StackPane fx:id="stackPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="570.0"> 
        <children> 
         <ResizableCanvas fx:id="spectrum" /> 
        </children> 
        </StackPane> 
        <ResizableCanvas fx:id="freqScale" height="30.0" width="570.0" VBox.vgrow="NEVER" /> 
       </children> 
      </VBox> 
      <ResizableCanvas fx:id="dbmScale" height="200.0" width="30.0" HBox.hgrow="NEVER" /> 
     </children> 
     </HBox> 
    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" /> 
    </items> 
</SplitPane> 

Надеюсь, это все имеет смысл. Ясно, что чего-то не хватает.

Спасибо!

ответ

0

Ответ: У Stackpane был (в SceneBuilder) параметр наследования Vgrow, который я не могу найти нигде, и он не является значением в перечислении Priority.

Если кто-то осветит цель наследования Я, и я уверен, что другие, были бы признательны.

+0

«Inherit» описан в [документации по JavaFX CSS] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#typeinherit) –

Смежные вопросы