我的应用程序中有一个默认的jtable。我想做一些检查,并更改第一列等于close的所有行的颜色。
我一直试图这样做,我们得到的最多就是:
String x = jTable.getModel().getValueAt(0, 0).toString();
if(x.equals("close"))
{
jTable.setForeground(Color.red);
}
但是我的方式改变了所有线条的颜色。并且只检查表格的第一个元素。
我喜欢做所有检查行,只更改第一列等于close的人。
有人可以帮我吗?
感谢你们给我的任何帮助。
问候。
答案 0 :(得分:1)
您必须实施TableCellRenderer。看一下oracle的JTable教程的Using Custom Renderers。
答案 1 :(得分:0)
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column)
{
Component cell = super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
String str = combo.getSelectedItem().toString();
if (value.toString().equalsIgnoreCase(str))
{
cell.setBackground(Color.RED);
}
else
{
cell.setBackground(null);
}
return cell;
}
答案 2 :(得分:0)
您需要使用TableCellRenderer
。这个组件就像一个橡皮图章,可以在桌子上移动并在需要时绘制单元格 - 与Swing中的普通组件不同,它在一个位置具有较长的使用寿命。
以下是您可以在桌面上使用的示例。
class MyTableCellRenderer extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (table.getModel().getValueAt(row, 0).equals("close")) {
setForeground(Color.RED);
} else {
setForeground(Color.BLACK);
}
setText(String.valueOf(value));
return this;
}
}
public JTableFrame() {
JTable table = new JTable();
// Give your table some data:
// table.setModel(new BlahTableModel());
// Install the renderer on all columns
MyTableCellRenderer renderer = new MyTableCellRenderer();
table.getColumnModel().getColumn(0).setCellRenderer(renderer);
table.getColumnModel().getColumn(1).setCellRenderer(renderer);
getContentPane().add(BorderLayout.CENTER, new JScrollPane(table));
}
答案 3 :(得分:0)
查看Table Row Rendering这比使用自定义渲染器更简单,因为您无需担心为表格中的每种数据类型创建自定义渲染器。