javafx的先前选项卡会影响最新的选项卡

TotallyGamerJet

一切正常,直到我创建一个新选项卡。然后,当我转到上一个并尝试使用任何按钮时,它们会影响最新的选项卡,而不是我选择的选项卡。但是,如果我转到最新的标签页,则其工作原理与正常情况相同。这是我用来制作标签的类。那么,为什么以前的标签会影响最新的标签?以及我该如何解决?

public class JTab {

private javafx.scene.control.Tab tab;
private ImageView imgView;
private Image logo;
private BorderPane root;
private Button reloadButton, backButton, forwardButton;
private TextField field;
private WebView view;
private WebEngine engine;

private static JTab instance;
private JBrowser jBrowser;

private JTab(JBrowser jBrowser) {
   this.jBrowser =  jBrowser;
}

public static JTab getInstance(JBrowser browser) {
    if(instance == null)
        instance = new JTab(browser);
    return instance;
}

public javafx.scene.control.Tab addTab() {
    tab = new Tab();
    tab.setText("New Tab");
    tab.setOnClosed(event2 -> {
        if(jBrowser.getTabPane().getTabs().size() == 1) {
            jBrowser.getTabPane().setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
        }
    });

    logo = new Image("unknown-document.png");
    imgView = new ImageView(logo);
    tab.setGraphic(imgView);

    HBox hBox = new HBox(5);
    hBox.setAlignment(Pos.CENTER);

    reloadButton = new Button("Reload");
    backButton = new Button("<");
    forwardButton = new Button(">");

    reloadButton.setOnAction(event1 -> engine.reload());
    backButton.setOnAction(event1 -> loadData(goBack()));
    forwardButton.setOnAction(event1 -> loadData(goForward()));

    //The TextField for entering web addresses.
    field = new TextField("Enter URL");
    field.setPrefColumnCount(50); //make the field at least 50 columns wide.
    field.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) -> { //When click on field entire thing selected
        Platform.runLater(() -> {
            if (field.isFocused() && !field.getText().isEmpty()) {
                field.selectAll();
            }
        });
    });
    field.setOnKeyPressed(event -> { //When ENTER is pressed it will load page
        if (event.getCode() == KeyCode.ENTER) {
            if (!field.getText().isEmpty()) {
                loadData(field.getText());
            }
        }
    });

    //Add all out navigation nodes to the vbox.
    hBox.getChildren().addAll(backButton, forwardButton, reloadButton, field);

    view = new WebView();

    engine = view.getEngine();
    engine.setJavaScriptEnabled(true);
    engine.getLoadWorker().stateProperty().addListener(
            (ov, oldState, newState) -> {
                if (newState == Worker.State.SUCCEEDED) {
                    tab.setText(getTitle());
                    //TODO setGraphic
                }
            });
    loadData("google.com");

    root = new BorderPane();
    root.setPrefSize(1024, 768);
    root.setTop(hBox);
    root.setCenter(view);


    tab.setContent(root);
    return tab;
}


public void loadData(String URL) {
    if(!URL.startsWith("http://")) {
        URL = "http://" + URL;
    }
    field.setText(URL);
    tab.setText(URL);
    engine.load(URL);

}

private String getTitle() {
    Document doc = engine.getDocument();
    NodeList heads = doc.getElementsByTagName("head");
    String titleText = engine.getLocation() ; // use location if page does not define a title
    if (heads.getLength() > 0) {
        Element head = (Element)heads.item(0);
        NodeList titles = head.getElementsByTagName("title");
        if (titles.getLength() > 0) {
            Node title = titles.item(0);
            titleText = title.getTextContent();
        }
    }
    return titleText;
}

private String goBack() {
    final WebHistory history = engine.getHistory();
    ObservableList<WebHistory.Entry> entryList = history.getEntries();
    int currentIndex=history.getCurrentIndex();

    Platform.runLater(() -> history.go(-1));
    return entryList.get(currentIndex>0?currentIndex-1:currentIndex).getUrl();
}

private String goForward() {
    final WebHistory history = engine.getHistory();
    ObservableList<WebHistory.Entry> entryList=history.getEntries();
    int currentIndex=history.getCurrentIndex();

    Platform.runLater(() -> history.go(1));
    return entryList.get(currentIndex<entryList.size()-1?currentIndex+1:currentIndex).getUrl();
    }
}
TotallyGamerJet

删除getInstance(jBrowser)方法

将构造函数公开。

然后向tabPane添加一个标签页 tabPane.getTabs().add(new JTab(jBrowser).addTab());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

识别JavaFX选项卡

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

JavaFX-选项卡中的FXML

来自分类Dev

更改JavaFx选项卡的默认外观

来自分类Dev

JavaFX Scene Builder定制选项卡

来自分类Dev

JavaFX 禁用选项卡导航

来自分类Dev

引导导航选项卡不影响多个选项卡内容

来自分类Dev

如果选项卡被隐藏,C1 选项卡控件会留下间隙

来自分类Dev

更改选项卡时,TabNavigator 会跟踪所有选项卡

来自分类Dev

即使在活动选项卡上,Angular Material 选项卡也会变灰

来自分类Dev

将按钮添加到选项卡和选项卡区域JavaFX

来自分类Dev

Ubuntu的Windows“先前版本”选项卡的实现?

来自分类Dev

卷影服务中的先前版本选项卡

来自分类Dev

链接到jQuery选项卡的特定选项卡

来自分类Dev

AngularJS引导程序选项卡选项卡标题

来自分类Dev

jQuery选项卡和子选项卡

来自分类Dev

CSS选项卡问题与选定的选项卡

来自分类Dev

侦听选项卡控件中的选项卡单击

来自分类Dev

jQuery选项卡默认选项卡

来自分类Dev

在NERDTREE选项卡中移动选项卡

来自分类Dev

活动选项卡上的CSS选项卡箭头

来自分类Dev

jQuery选项卡-动态返回选定的选项卡

来自分类Dev

jQuery UI选项卡中的选项卡对齐

来自分类Dev

AngularJS的Bootstrap选项卡

来自分类Dev

Bootstrap嵌套选项卡

来自分类Dev

ListView粉碎选项卡

来自分类Dev

自动引导选项卡

来自分类Dev

jQuery选项卡导航

来自分类Dev

选项卡按钮功能