JavaFX:如何在选择项目后隐藏项目选择

时间:2015-08-01 06:37:52

标签: javafx javafx-webengine

我创建了一个WebEngine,我可以使用Choicebox中最喜欢的Web URL(= favBox)。 选择项目后,将显示该项目并加载网站。但我的问题是:在剩下的会话中仍然可以看到该项目。如何隐藏项目选择并仅显示没有项目的ChoiceBox?

非常感谢

@FXML
private void handleFavoritLoading(MouseEvent event) {
    //favBox is a ChoiceBox
    favBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {

        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
            System.out.println("OK");
            browser.load(favBox.getItems().get(newValue.intValue()));
            // how to make the favBox not showing the selected item???



        }

    });

}

1 个答案:

答案 0 :(得分:1)

您可以清除ChoiceBox的选择,然后不会在其中选择任何内容。

favBox.getSelectionModel().selectedItemProperty().addListener(
        (observable, oldValue, newValue) -> {
            if (newValue != null) {
                browser.load(newValue);
                favBox.getSelectionModel().clearSelection();
            }
        }
);

请注意,这种行为有点奇怪,因为大多数情况下您可能希望在选择后继续显示所选的选项。但是,如果您不想要标准操作并希望在选择后立即清除选择,则可以始终使用此处提供的示例代码。

示例应用:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.web.*;
import javafx.stage.Stage;

import static javafx.collections.FXCollections.observableArrayList;

public class HiddenChoices extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        WebView webView = new WebView();
        WebEngine browser = webView.getEngine();
        VBox.setVgrow(webView, Priority.ALWAYS);

        ChoiceBox<String> favBox = new ChoiceBox<>(
                observableArrayList(
                        "http://www.google.com",
                        "http://andrew-hoyer.com/experiments/cloth/",
                        "http://www.effectgames.com/demos/canvascycle/",
                        "http://www.zynaps.com/site/experiments/environment.html?mesh=bart.wft"
                )
        );

        favBox.getSelectionModel().selectedItemProperty().addListener(
                (observable, oldValue, newValue) -> {
                    if (newValue != null) {
                        browser.load(newValue);
                        favBox.getSelectionModel().clearSelection();
                    }
                }
        );

        ProgressBar progress = new ProgressBar();
        progress.progressProperty().bind(browser.getLoadWorker().progressProperty());
        progress.visibleProperty().bind(browser.getLoadWorker().runningProperty());

        HBox controls = new HBox(10, favBox, progress);
        controls.setMinHeight(HBox.USE_PREF_SIZE);
        controls.setAlignment(Pos.CENTER_LEFT);
        stage.setScene(
                new Scene(
                        new VBox(10, controls, webView)
                )
        );
        stage.show();

        favBox.getSelectionModel().select(0);
    }

    public static void main(String[] args) {
        Application.launch();
    }
}