0

選択リストに線種を表示するようにコンボボックスをカスタマイズしましたが、ボタンにテキストが表示されるだけです。選択した線種をボタンに描画するにはどうすればよいですか。

ComboBox<String> cmb = new ComboBox<String>();
cmb.getItems().addAll("-fx-stroke-dash-array: 12 2 4 2;", "-fx-stroke-dash-array: 2 2;");
cmb.setCellFactory(new Callback<ListView<String>, ListCell<String>>()
    {
        @Override public ListCell<String> call(ListView<String> p)
        {
            return new ListCell<String>()
                {
                    private final Group group;
                    private final Line line;
                    { 
                        setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
                        group = new Group();
                        group.getChildren().add(new Rectangle(100, 30, Color.WHITE));
                        line = new Line(0, 15, 100, 15);
                        group.getChildren().add(line);
                    }

                    @Override protected void updateItem(String style, boolean empty)
                    {
                        super.updateItem(style, empty);
                        if(style != null && !empty)
                        {
                            line.setStyle(style);
                            setGraphic(group);
                        }
                    }
                };
        }
    });

レンダリング方法は次のとおりです。 JavaFXカスタムコンボボックス

スタイルテキスト「-fx-stroke...」の代わりに、選択した行サンプルを表示したいのですが、どうすれば修正できますか?

選択リストでは、行の左側に常に余分なスペースがありますが、このスペースを取り除くことは可能ですか?

4

1 に答える 1

2

JavaFXはSwingとは異なり、CellFactoryによって作成されたノードをキャッシュし、レンダリングや破棄に使用するのではなく、それに応じて更新するだけです(これが、updateItemを実装する必要がある理由です)。JFXクラスは、1つのノード(または「セル」)をいわゆるボタンセルとして使用します。これは、テキストを表示するだけのノードです。基本的に、を呼び出す必要がありますcmd.setButtonCell(myCellFactory.call(null));。これにより、カスタムセルの1つがボタンセルとしてインストールされ、コンボボックスによって適切な値で自動的に更新されます。

于 2012-08-28T20:24:32.507 に答える