JavaFX Stage未完全加载

时间:2016-02-12 03:29:04

标签: javafx

我在场景中有一整套控件和过渡,每当出现错误或消息时,我都会调用Mg, Mn, Na, K.... 6, 16, 88, 5... 33, 12, 56, 7...

包含的样本没有错误,因为它是空的。但是当所有的东西都处于活动状态时,FormBuilder.say(String x)的弹出就会变得一团糟。

如果我等待足够长的时间,尝试进行交互,或者如果我最小化然后恢复舞台,它会正确加载。但很多时候,它只是空白。

我的笔记本电脑运行Ubuntu 15.10,内存大约2GB。没有视频卡。

包含杂乱图片的屏幕截图。Sample with error

包含在bug期间受影响的代码。我找出了一些不太可疑的部分。 (修改)

FormBuilder.say(String x)
 package solo;

 import javafx.animation.Animation;
 import javafx.animation.TranslateTransition;
 import javafx.application.Application;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
 import javafx.scene.layout.Pane;
 import javafx.scene.layout.VBox;
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Rectangle;
 import javafx.scene.text.Text;
 import javafx.stage.Stage;
 import javafx.stage.StageStyle;
 import javafx.stage.Window;
 import javafx.util.Duration;

 public class FormBuilder extends Application{

    Stage ps;
        public FormBuilder(){

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

        public void start(Stage primaryStage) {
            ps = primaryStage;
            ps.setTitle("E-VIL v0.0");

            ps.setScene(new Scene(scene(), 800, 600));
            ps.show();
        }

        public void say(String things){
            Stage stage = new Stage(StageStyle.UTILITY);
            stage.initOwner(ps);
            Text text = new Text(things);
            Button btn = new Button("Okay");
            btn.setOnAction(e -> {stage.close();});
            VBox pane = new VBox(text,btn);
            pane.setAlignment(Pos.TOP_CENTER);
            text.setLayoutY(12);
            pane.autosize();
            stage.setScene(new Scene(pane));
            stage.sizeToScene();
            stage.setOnShown(e -> {stage.requestFocus();});
            stage.showAndWait();
        }
        public Pane scene(){
            Pane pn = new Pane();
            Button btn = new Button("Say Something");
            btn.setOnAction(e->{FormBuilder.this.say("Something");});
            btn.setLayoutX(0);
            btn.setLayoutY(10);
            pn.getChildren().add(btn);

            pn.sceneProperty().addListener(new ChangeListener<Scene>(){
                @Override
                public void changed(ObservableValue<? extends Scene> arg0, Scene arg1, Scene arg2) {
                    System.out.println("new Scene");
                    if(arg2 != null)
                    arg2.windowProperty().addListener(new ChangeListener<Window>(){
                        @Override
                        public void changed(ObservableValue<? extends Window> observable, Window oldValue,
                                Window newValue) {
                            System.out.println("new window");
                            if(newValue != null){
                                Rectangle rect = new Rectangle(0,30,300,300);
                                rect.setFill(Color.RED);
                                pn.getChildren().add(rect);

                                Rectangle box = new Rectangle(30,60,50,50);
                                TranslateTransition tt = new TranslateTransition(Duration.seconds(1), box);
                                tt.setByX(160);
                                tt.setByY(160);
                                tt.setAutoReverse(true);
                                tt.setCycleCount(Animation.INDEFINITE);
                                pn.getChildren().add(box);
                                tt.play();

                            }
                        }

                    });
                }

            });

            return pn;
        }
 }

0 个答案:

没有答案