Can someone give me an example of how to get the background color of a particular cell in a JTable? I am unable to find an example of how to do this. Plenty of examples on getting the value in a cell, but not the background color of a cell.
It should be something like the following (fixed according to all comments):
Important: use table.prepareRenderer(...) to let JTable do all work for you
public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}
Full demo:
public class TableRenderDemo extends JPanel {
public TableRenderDemo() {
super(new GridLayout(1, 0));
final JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(600, 200));
table.setFillsViewportHeight(true);
table.setDefaultRenderer(Object.class, new MyRenderer());
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
JOptionPane.showInternalMessageDialog(TableRenderDemo.this,
"Color: " + getTableCellBackground(table, row, col));
System.out.println("Color: " + getTableCellBackground(table, row, col));
}
});
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public Color getTableCellBackground(JTable table, int row, int col) {
TableCellRenderer renderer = table.getCellRenderer(row, col);
Component component = table.prepareRenderer(renderer, row, col);
return component.getBackground();
}
class MyRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JTextField editor = new JTextField();
if (value != null) {
editor.setText(value.toString());
}
editor.setBackground((row % 2 == 0) ? Color.white : Color.BLUE);
return editor;
}
}
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
private Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public final Object[] longValues = {"Jane", "Kathy",
"None of the above",
new Integer(20), Boolean.TRUE};
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("TableRenderDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableRenderDemo newContentPane = new TableRenderDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Can someone give me an example of how to get the background color of a particular cell in a JTable? I am unable to find an example of how to do this.
TableCellRenderer or for Renderer,
but everything is based on JTable tutorial, expecially part of Editors and Renderers and Custom Renderers
Plenty of examples on getting the value in a cell, but not the background color of a cell.
I can't resist, please on this forum or where
I hope that help you ....
To get the JTable
color at cell 0, 0
you could get the background color of the cell component:
TableCellRenderer cellRenderer = table.getCellRenderer(0, 0);
Component rendererComponent = cellRenderer.getTableCellRendererComponent(table, null, false, true, 0, 0);
Color cellColor = rendererComponent.getBackground();
Use TableCellRenderer
jTable1 = new javax.swing.JTable(6,6){
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
if(column==2 && row==4)
{
Color color= c.getBackground();// use setBackground to set color and get background to get background of a particular cell
System.out.println("Color of row=0 and column=0 is "+color);
}
else
{
c.setBackground(Color.GREEN);
setShowGrid(true);
}
return c;
}
};
来源:https://stackoverflow.com/questions/12861402/jtable-cell-color