书签和历史记录按钮未在我的浏览器中使用JavaFX显示

时间:2015-09-08 03:33:08

标签: java

我正在JavaFX中制作一个Web浏览器,我认为一切都很好,花花公子。我运行了应用程序,现在不会出现历史记录和书签按钮。我查看了代码并没有看到任何错误。我该如何解决这个问题?

package javafxapplication3;

import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebHistory;

public class CreateAsIGo2 extends Application{
    public static void main(String[] args){
        launch(args);
    }
    public void start(Stage primaryStage){
        BorderPane ap = new BorderPane();
        BorderPane ap2 = new BorderPane();
        BorderPane ap3 = new BorderPane();

        Scene scene = new Scene(ap, 700, 700);
        Scene scene2 = new Scene(ap2, 700, 700);
        Scene scene3 = new Scene(ap3, 700, 700);

        VBox sp = new VBox();
        VBox sp2 = new VBox();
        VBox sp3 = new VBox();

        Button HistoryButton = new Button("History");
        Button BookmarksButton = new Button("Bookmarks");        
        Button RefreshButton = new Button("Refresh");
        Button BackButton = new Button("Back");
        Button BackToBrowser = new Button("Back to surfing the web");
        Button ForwardButton = new Button("Forward");

        TextField tf = new TextField();
        tf.setPromptText("URL");

        WebView browser = new WebView();

        WebEngine webEngine = browser.getEngine();
        webEngine.load("http://www.google.com");
        webEngine.setJavaScriptEnabled(true);

        WebHistory history = webEngine.getHistory();



        HistoryButton.setOnAction(e -> primaryStage.setScene(scene2));
        BookmarksButton.setOnAction(e -> primaryStage.setScene(scene3));
        RefreshButton.setOnAction(e -> webEngine.reload());        
        BackButton.setOnAction(e -> webEngine.executeScript("history.back()"));        
        BackToBrowser.setOnAction(e -> primaryStage.setScene(scene));        
        ForwardButton.setOnAction(e -> webEngine.executeScript("history.forward()"));

        tf.setOnKeyPressed((KeyEvent ke) -> {
            KeyCode key = ke.getCode();
            if(key == KeyCode.ENTER){
                webEngine.load("http://" + tf.getText());
            }
        });

        sp.getChildren().addAll(HistoryButton, BookmarksButton, RefreshButton, BackButton, ForwardButton);
        sp2.getChildren().addAll(BookmarksButton, BackToBrowser);
        sp3.getChildren().addAll(HistoryButton, BackToBrowser);

        ap.setRight(sp);
        ap2.setRight(sp2);
        ap3.setRight(sp3);
        ap.setTop(tf);
        ap.setCenter(browser);

        browser.setPrefSize(700, 700);
        primaryStage.setTitle("JTG Browser Alpha");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

1 个答案:

答案 0 :(得分:0)

请参阅node documentation

  

如果程序将子节点添加到Parent(包括Group,Region等)并且该节点已经是不同Parent的子节点或Scene的根节点,则该节点将自动(并静默地)从其节点中删除前父母。

您正在将HistoryButton(和其他按钮)添加到不同的场景中,当您这样做时,它们会自动从之前的场景中删除。如果希望在每个场景中都可以看到它们,则需要创建新的按钮实例。

小旁白:最好遵循Java命名约定,例如: historyButton代替HistoryButton