2015-09-06 105 views
0

一切正常,直到我创建一个新的选项卡。然后,当我转到上一个并尝试使用任何按钮时,它们会影响最新的选项卡,而不是我选择的选项卡。但如果我去最新的标签,它就像正常一样工作。这是我用来制作标签的课程。那么,为什么以前的标签影响最新?我该如何解决它?javafx以前的选项卡影响最新的选项卡

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(); 
    } 
} 

回答

0

删除的getInstance(jBrowser)方法

使构造函数公开。

然后到选项卡添加到tabPane做 tabPane.getTabs().add(new JTab(jBrowser).addTab());

相关问题