2014-04-17 56 views
0

我設置以下自定義行工廠:JavaFX8 CustomRowFactory文本菜單背景圖片不完全可見

treeTblViewFiles.setRowFactory(new Callback<TreeTableView<FileModel>, TreeTableRow<FileModel>>() { 

      @Override 
      public TreeTableRow<FileModel> call(TreeTableView<FileModel> treeTableView) { 
       final TreeTableRow<FileModel> row = new TreeTableRow<>(); 
       final ContextMenu rowMenu = new ContextMenu(); 
       MenuItem removeItem = new MenuItem("Remove"); 
       removeItem.setOnAction(new EventHandler<ActionEvent>() { 

        @Override 
        public void handle(ActionEvent t) { 
         int currentPlaylistIndex = m_playlists.indexOf(row.getTreeItem().getParent().getValue()); 
         boolean itemRemoved = false; 
         if (row.getItem().getClass().equals(Song.class)) { 
          itemRemoved = m_playlists.get(currentPlaylistIndex).getSongs().remove(row.getItem()); 
          m_playlists.get(currentPlaylistIndex).updatePlaylist((Song) row.getItem()); 
         } else if (row.getItem().getClass().equals(Playlist.class)) { 
          itemRemoved = m_playlists.remove(row.getTreeItem().getValue()); 
         } 
         TreeItem<FileModel> treeItem = row.getTreeItem(); 
         // may need to check treeItem.getParent() is not null: 
         treeItem.getParent().getChildren().remove(treeItem); 
         treeTblViewFiles.getSelectionModel().clearSelection(); 
         if (MyApp.DEBUG) { 
          System.out.println(m_playlists.size()); 
          if (currentPlaylistIndex > -1) { 
           System.out.println(m_playlists.get(currentPlaylistIndex).getSongs().size()); 
          } 
         } 
        } 
       }); 
       rowMenu.getItems().add(removeItem); 
       row.contextMenuProperty().bind(Bindings.when(Bindings.isNotNull(row.itemProperty())) 
         .then(rowMenu) 
         .otherwise((ContextMenu) null)); 
       return row; 
      } 

     }); 

和我的CSS我有:

/****************** 
* ContextMenu 
******************/ 
.context-menu{ 
     -fx-background-color: transparent; 
} 
.context-menu .menu-item{ 
    -fx-background-image: url("styles/cm_bg.png"); 
    -fx-background-repeat: no-repeat; 
    -fx-background-position: center; 
     -fx-background-color: transparent; 
} 
.context-menu .menu-item .label{ 
     -fx-text-fill: #ababab; 
    -fx-font-weight: normal; 
    -fx-font-size: 12pt; 
} 

的問題是,它不顯示整個圖像(即220x40),但只顯示適合「刪除」字符串的寬度。最右邊的部分被切斷。

編輯: 簡化版本(同樣的結果也適用於一個ContextMenu上的標籤):

ContextMenu cm = new ContextMenu(); 
MenuItem mi = new MenuItem("Test"); 
cm.getItems().addAll(mi); 
lblUploader.setContextMenu(cm); 

這是爲什麼發生,如何解決呢?

在此先感謝。

+0

這是特定於樹表視圖行單元格上的上下文菜單,還是發生在放置在非虛擬化控件上的上下文菜單中發生的相同情況? (也就是說,你可以通過在標籤上放置一個上下文菜單來重現這一點嗎?) –

+0

我已經在一個標籤上測試過它,並且有相同的圖片 –

+0

也許用帶Label的簡單示例更新您的問題,因爲它對於人來說更容易複製?一般來說,診斷這類問題的最好方法是使用[ScenicView](http://fxexperience.com/scenic-view/),儘管我從未嘗試過使用「ContextMenu」。 –

回答

0

問題的以下的CSS解決:

.context-menu { 
    -fx-background-color: transparent; 
    -fx-min-width: <image_width>; 
    -fx-min-height: <image_height>; 
} 

只要記住設置首選(或分鐘)的尺寸。

+0

這可能只是一種解決方法,但在我的情況下就足夠了。 –