我正在尝试创建一个浏览器来实践 JavaFX。我用 Stack 实现了 Back 按钮。
- 当页面的 URL 发生变化时,将 url 添加到 Stack(java.util.Stack)
- 按下后退按钮时,从堆栈中弹出 1 项并显示页面
但这在 URL 重定向的情况下不起作用。例如。我输入http://www.google.com,它会自动重定向到http://www.google.co.in(印度)。这会在 Stack 中生成 2 个条目,这会破坏 Back 按钮逻辑,因为页面相同但取自不同位置。
请帮助我解决这个问题。
谢谢你的帮助
webEngine.locationProperty().addListener(new ChangeListener<String>(){
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
//urlField is a text Field
urlField.setText(newValue);
addURLToStack(oldValue);
if(backButtonStack.size() ==1){ //means on last url of Stack
backButton.setDisable(true);
}
else{
backButton.setDisable(false);
}}
});
backButton.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
if(backButtonStack != null && !backButtonStack.isEmpty()){
String poppedURL = backButtonStack.pop();
webEngine.load(poppedURL);
}
}
});
private void addURLToStack(String url) {
if(backButtonStack == null){
backButtonStack = new Stack<String>();
}
backButtonStack.push(url);
}