Java - Scene1 未显示,相同的 Scene2 有效
Java - Scene1 not showing, identical Scene2 works
我很难理解为什么这段代码不起作用。没有编译错误。
scene2 如我所料绘制。两个场景中的按钮都有效。 Scene1 不会显示图像。虽然它与确实有效的 scene2 相同。问题似乎出在 scene1 上。
如果我改变这一行
primaryStage.setScene(scene1);
至
primaryStage.setScene(scene2);
Scene2 再次工作,但 scene1 坏了,只显示按钮。这似乎再次表明 scene1 对象是问题所在???
如能指出明显的帮助,我们将不胜感激。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import java.util.Scanner;
public class Main extends Application {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button button = new Button();
Button button1 = new Button();
button.setText("Start Games");
button1.setText("Quit game");
Image displayedimg = new Image("old_four_finger.png");
Image displayedimg2 = new Image("edelen_tree_srv.png");
ImageView iv1 = new ImageView();
iv1.setImage(displayedimg);
ImageView iv2 = new ImageView();
iv2.setImage(displayedimg2);
Group root1 = new Group();
HBox layout1 = new HBox();
Scene scene1 = new Scene(root1);
layout1.setStyle("-fx-background-color: #00ff00;");
layout1.getChildren().add(button);
layout1.getChildren().add(iv1);
layout1.getChildren().add(iv2);
root1.getChildren().add(layout1);
Group root2 = new Group();
HBox layout2 = new HBox();
Scene scene2 = new Scene(root2);
layout2.setStyle("-fx-background-color: #00ff00;");
layout2.getChildren().add(button1);
layout2.getChildren().add(iv1);
layout2.getChildren().add(iv2);
root2.getChildren().add(layout2);
// Set our button(s) clickable actions
button.setOnAction(e -> {
primaryStage.setScene(scene2);
});
button1.setOnAction(e -> {
primaryStage.setScene(scene1);
});
primaryStage.setScene(scene1);
primaryStage.show();
}
}
一个元素(在本例中为 ImageView
s)只能有 1 个父元素。当你使用
layout1.getChildren().add(iv1);
然后将 iv1 的父级设置为 layout1。但是当你这样做时
layout2.getChildren().add(iv2);
然后将 iv1 的父级设置为 layout2,从而将其从 layout1 中移除。尝试根据使用的场景动态设置父 if iv1。
我很难理解为什么这段代码不起作用。没有编译错误。
scene2 如我所料绘制。两个场景中的按钮都有效。 Scene1 不会显示图像。虽然它与确实有效的 scene2 相同。问题似乎出在 scene1 上。
如果我改变这一行
primaryStage.setScene(scene1);
至
primaryStage.setScene(scene2);
Scene2 再次工作,但 scene1 坏了,只显示按钮。这似乎再次表明 scene1 对象是问题所在???
如能指出明显的帮助,我们将不胜感激。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import java.util.Scanner;
public class Main extends Application {
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button button = new Button();
Button button1 = new Button();
button.setText("Start Games");
button1.setText("Quit game");
Image displayedimg = new Image("old_four_finger.png");
Image displayedimg2 = new Image("edelen_tree_srv.png");
ImageView iv1 = new ImageView();
iv1.setImage(displayedimg);
ImageView iv2 = new ImageView();
iv2.setImage(displayedimg2);
Group root1 = new Group();
HBox layout1 = new HBox();
Scene scene1 = new Scene(root1);
layout1.setStyle("-fx-background-color: #00ff00;");
layout1.getChildren().add(button);
layout1.getChildren().add(iv1);
layout1.getChildren().add(iv2);
root1.getChildren().add(layout1);
Group root2 = new Group();
HBox layout2 = new HBox();
Scene scene2 = new Scene(root2);
layout2.setStyle("-fx-background-color: #00ff00;");
layout2.getChildren().add(button1);
layout2.getChildren().add(iv1);
layout2.getChildren().add(iv2);
root2.getChildren().add(layout2);
// Set our button(s) clickable actions
button.setOnAction(e -> {
primaryStage.setScene(scene2);
});
button1.setOnAction(e -> {
primaryStage.setScene(scene1);
});
primaryStage.setScene(scene1);
primaryStage.show();
}
}
一个元素(在本例中为 ImageView
s)只能有 1 个父元素。当你使用
layout1.getChildren().add(iv1);
然后将 iv1 的父级设置为 layout1。但是当你这样做时
layout2.getChildren().add(iv2);
然后将 iv1 的父级设置为 layout2,从而将其从 layout1 中移除。尝试根据使用的场景动态设置父 if iv1。