问题
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.
回答1:
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();
}
});
}
}
回答2:
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 examples here and here
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 ....
回答3:
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();
回答4:
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