2017-08-04 74 views
0

我是Swing的新手。我剛剛開始Swing幾周前,我堅持在一些點..使用JColorChooser設置JTable的行顏色

我設計了一個JTable有一些行點擊(右)它打開一個彈出菜單有「更改行顏色」選項(JMenuItem),點擊哪個JColorChooser打開,用戶可以選擇顏色,並將相同的顏色設置爲選定的行。

是否可以做到這一點?怎麼樣?

enter image description here

enter image description here

+3

要啓用複製和粘貼,請把你的代碼格式的文本,而不是圖像。 –

+0

在Java教程中有一個非常類似的演示:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer –

回答

1

如果你要的顏色各行的能力分開,其中一個方法是將顏色作爲存儲在TableModel中的部分數據。所以你需要添加顏色作爲模型中的一列。

但你不會希望在表視圖中顯示此列,所以你需要從視圖中刪除它:

table.removeColumn(table.getColumn(...)); 

接下來,您將需要添加自定義繪製的表格。一種方法是爲整行添加渲染。請參閱Table Row Rendering以獲取此方法的示例。

所以對於渲染的基本代碼會是這樣的:

Color background = table.getTableModel.getValueAt(row, ???); 

if (background != null) 
    c.setBackground(background); 

當你顯示的顏色選擇您需要的顏色保存到TableModel的:

table.getTableModel().setValueAt(color, table.getSelectedRow(), ???); 
+0

我使用默認表模型並在運行時填充表,所以它如果你分享一些代碼如何添加顏色作爲一個殖民地,並應用你的概念,因爲它給我的錯誤 – anrdggle

+0

@anrdggle,「這將是最好的,如果你分享一些代碼」 - 我給你開始的工作代碼。閱讀鏈接並下載演示代碼。用Color對象添加列與用String對象添加列有什麼不同?如果你需要幫助,然後張貼[mcve]來展示你的嘗試。我不可能猜出你有什麼錯誤,因爲我不是一個讀心術。 – camickr

+0

感謝曼恩,我花了我時間瞭解你說的是爲我工作......謝謝 – anrdggle

0

另一種方式將行&顏色在map<Integer, Color>

(use table.getSelectedRow()) 

從供JColorChooser,使用捕捉顏色: Color selectedColor = myColorChooser.getSelectionModel().getSelectedColor();

然後,修改默認渲染器:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { 
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
        boolean hasFocus, int row, int column) { 

       final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, 
         column); 

       if (listOfColor.containKey(row)) { 

        c.setBackground(listOfColor.get(row)); 

       } 

       DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer) c; 
       centerRenderer.setHorizontalAlignment(SwingConstants.CENTER); 
       return c; 
      } 
     }); 
+0

感謝您的迴應....但問題是如何捕捉從Jcolor選擇器的顏色,然後將其設置在桌子上....在上面提到的鏈接中沒有使用jcolorchooser ... – anrdggle

+0

我編輯了我的答案,爲您提供了從JColorChooser獲取顏色的方法。 –

+0

謝謝Xavier .. – anrdggle