【发布时间】:2012-12-19 16:47:31
【问题描述】:
我正在尝试创建一个浏览器来实践 JavaFX。我用 Stack 实现了 Back 按钮。
- 当页面的URL发生变化时,将url添加到Stack(java.util.Stack)
- 按下后退按钮时,从 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);
}
【问题讨论】:
-
不要使用 java.util.Stack,它已被弃用!使用 LinkedList 和它的接口 Deque。 docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html
-
感谢您的信息,但即使我使用链表,我原来的问题仍然存在。额外的值将被添加到链接列表而不是自动 URL 重定向中的堆栈
-
你能添加一些你的代码吗?我想你的问题很容易理解
-
webEngine.locationProperty().addListener(new ChangeListener
(){ @Override public void changed(ObservableValue extends String> observable, String oldValue, String newValue) { //urlField 是一个text Field urlField.setText(newValue); addURLToStack(oldValue); if(backButtonStack.size() ==1){ //表示堆栈的最后一个 url backButton.setDisable(true); } else{ backButton.setDisable(false) ; }} }); -
No-no-no!=) 将此代码添加到您的问题中,并将其放入标记“代码”中!)
标签: java url browser javafx url-redirection