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】:
如果IPView
是HBox
的子类,则需要将按钮添加到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 中的 ComboBox 导致不必要的大小调整
可以决定 GridPane (JavaFX) 中的行数和列数