0

Choicebox(=favBox)からお気に入りのWeb URLを利用できるWebEngineを作りました。アイテムを選択すると、アイテムが表示され、ウェブサイトが読み込まれます。しかし、私の問題は次のとおりです。アイテムは、セッションの残りの部分でも表示されます。アイテムの選択を非表示にして、アイテムなしで 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???



        }

    });

}
4

1 に答える 1

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();
    }
}
于 2015-08-01T08:32:27.463 に答える