Javafx 中 GridPane 中的 HBox

Posted

技术标签:

【中文标题】Javafx 中 GridPane 中的 HBox【英文标题】:HBox inside GridPane in Javafx 【发布时间】:2014-12-18 01:26:38 【问题描述】:

我必须将 HBox 添加到 GridPane。如果我将 HBox 添加到同一类的 GridPane 中,则系统会正确显示。但是当我尝试使用两个类时,只显示空窗口。我是 javafx 的新手。我该怎么做,请帮助我谢谢。

public class IpCamMainWindow  extends Application

    private static ArrayList<IpCamViewer> ipCameraList = new ArrayList<IpCamViewer>();
    private static ArrayList<String> urls= new ArrayList<String>();
    GridPane grid =null;

    private ImageView imgWebCamCapturedImage;
    private BufferedImage grabbedImage;
    private ObjectProperty<Image> imageProperty = new SimpleObjectProperty<Image>();
    private Webcam webCam = null;
    private boolean stopCamera = false;
    IPview ipCamViewer=null;

    public static void main(String[] args) 


        launch(args);
    

    @Override
    public void start(Stage stage) throws Exception 
        grid = new GridPane();
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(0, 10, 0, 10));      

        for(int i=0;i<4;i++)
            ipCamViewer = new IPview();     

            grid.add(ipCamViewer, i%2, i/2);
            System.out.println("column: " + i%2 + ", row: " + i/2);

        

        Scene scene = new Scene(grid);
        stage.setScene(scene);
        stage.setTitle("IP Camera Solution");
        stage.show();       

       


-

public class IPview extends HBox   

    private ImageView imgWebCamCapturedImage;
    private BufferedImage grabbedImage;
    private ObjectProperty<Image> imageProperty = new SimpleObjectProperty<Image>();
    HBox hbox;

    public IPview()

        HBox hbox=addHBox();

    

    public HBox addHBox() 
        hbox = new HBox();
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(10);
        hbox.setStyle("-fx-background-color: #336699;");

        Button buttonCurrent = new Button("Current");
        buttonCurrent.setPrefSize(100, 20);

        Button buttonProjected = new Button("Projected");
        buttonProjected.setPrefSize(100, 20);
        hbox.getChildren().addAll(buttonCurrent, buttonProjected);

        return hbox;
       


【问题讨论】:

您需要确定IPView 是一个 HBox(继承:public class IPView extends HBox)还是IPView 有一个 @ 987654327@(聚合:HBox hbox)。现在您两者都有,并且您将按钮添加到聚合的 HBox,但您将 IPView 本身(不包含按钮)添加到 GridPane 我需要使用继承(公共类IPView扩展HBox)然后想将HBox添加到Gridpane。 所以不要在IPView中创建另一个HBox作为字段 【参考方案1】:

如果IPViewHBox 的子类,则需要将按钮添加到IPView 实例中,而不是创建另一个HBox 作为其成员变量。

public class IPview extends HBox   

    private ImageView imgWebCamCapturedImage;
    private BufferedImage grabbedImage;
    private ObjectProperty<Image> imageProperty = new SimpleObjectProperty<Image>();

    public IPview()

        this.setPadding(new Insets(15, 12, 15, 12));
        this.setSpacing(10);
        this.setStyle("-fx-background-color: #336699;");

        Button buttonCurrent = new Button("Current");
        buttonCurrent.setPrefSize(100, 20);

        Button buttonProjected = new Button("Projected");
        buttonProjected.setPrefSize(100, 20);
        this.getChildren().addAll(buttonCurrent, buttonProjected);

       


如果您希望HBox 成为成员变量,那么您不会将IPView 设为HBox 的子类,而只需提供对HBox 的访问权限:

public class IPview   

    private ImageView imgWebCamCapturedImage;
    private BufferedImage grabbedImage;
    private ObjectProperty<Image> imageProperty = new SimpleObjectProperty<Image>();
    private HBox hbox;

    public IPview()

        hbox = new HBox();
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(10);
        hbox.setStyle("-fx-background-color: #336699;");

        Button buttonCurrent = new Button("Current");
        buttonCurrent.setPrefSize(100, 20);

        Button buttonProjected = new Button("Projected");
        buttonProjected.setPrefSize(100, 20);
        hbox.getChildren().addAll(buttonCurrent, buttonProjected);

       

    public Node getView() 
        return hbox ; 
    


然后在你的应用程序类中你会这样做

        ipCamViewer = new IPview();     
        grid.add(ipCamViewer.getView(), i%2, i/2);

总的来说,我更喜欢第二种方法,但这只是个人喜好问题。

【讨论】:

以上是关于Javafx 中 GridPane 中的 HBox的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX:将图像插入 GridPane

JavaFX:GridPane 中的 ComboBox 导致不必要的大小调整

JavaFx GridPane 中的相对大小

可以决定 GridPane (JavaFX) 中的行数和列数

结合 javafx 2 ListView 和 GridPane 功能

JavaFX中GridPane的行居中对齐