2012-08-28 40 views
0

我已經自定義了一個組合框來顯示選擇列表中的線條類型,但按鈕只顯示文本。我怎樣才能在按鈕中繪製選定的線條類型?JavaFX組合框選擇線條樣式

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); 
         } 
        } 
       }; 
     } 
    }); 

這裏是如何呈現的:不是樣式文本「-fx衝程...」,我怎麼能解決這個問題 JavaFX custom combobox

我想顯示所選行樣本?

在選擇列表中總是有一個額外的空間在行左邊,是可以擺脫這個空間?

回答

2

JavaFX與Swing的工作方式不同,它緩存由您的CellFactory創建的節點,並且僅相應地更新它們,而不是使用它們進行渲染並將它們丟棄(這就是爲什麼您必須實現updateItem)的原因。 JFX類將使用一個節點(或「單元格」)作爲所謂的按鈕單元格,它只是爲您顯示文本的單元格。基本上,你必須調用cmd.setButtonCell(myCellFactory.call(null));。這會將您的一個自定義單元安裝爲按鈕單元格,並且組合框將自動使用適當的值更新它。

+2

在ComboBox javadoc的最開始可能會找到這些信息:http://docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBox.html –

+1

在閱讀「有關將節點插入組合框項目列表的警告「 –