我是Swing的新手。几周前我刚刚开始玩Swing,而且我在某个时候陷入困境......
我设计了一个JTable
点击(右)有一些行,它打开一个弹出菜单,其中包含" CHANGE ROW COLOR"选项(JMenuItem
),点击哪个JColorChooser
打开,用户可以选择颜色,相同的颜色将设置为所选行。
有可能吗?怎么样?
答案 0 :(得分:1)
如果您希望能够分别为每一行着色,那么一种方法是将Color存储为TableModel中数据的一部分。因此,您需要在模型中添加Color作为列。
但您不希望在表格视图中显示此列,因此您需要将其从视图中删除:
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(), ???);
答案 1 :(得分:0)
另一种方法是保存行&amp; 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;
}
});