我是Swing的新手。我剛剛開始Swing幾周前,我堅持在一些點..使用JColorChooser設置JTable的行顏色
我設計了一個JTable
有一些行點擊(右)它打開一個彈出菜單有「更改行顏色」選項(JMenuItem
),點擊哪個JColorChooser
打開,用戶可以選擇顏色,並將相同的顏色設置爲選定的行。
是否可以做到這一點?怎麼樣?
我是Swing的新手。我剛剛開始Swing幾周前,我堅持在一些點..使用JColorChooser設置JTable的行顏色
我設計了一個JTable
有一些行點擊(右)它打開一個彈出菜單有「更改行顏色」選項(JMenuItem
),點擊哪個JColorChooser
打開,用戶可以選擇顏色,並將相同的顏色設置爲選定的行。
是否可以做到這一點?怎麼樣?
如果你要的顏色各行的能力分開,其中一個方法是將顏色作爲存儲在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(), ???);
另一種方式將行&顏色在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;
}
});
要啓用複製和粘貼,請把你的代碼格式的文本,而不是圖像。 –
在Java教程中有一個非常類似的演示:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer –