English 中文(简体)
如何改变 JTable 中 Java 单个单元格的背景颜色?
原标题:how to change background color of individual cell in JTable in java?

I search in the table, when i find a match i want to change a bg color of that cell. I did as below but still can t fix it? Can any body help to fix this problem?

public class SearchTable extends JTable {
JTable table;
JTextField textField;

public SearchTable(JTable table, JTextField textField) {
    this.table = table;
    this.textField = textField;

    textField.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            search();
        }
    });

    textField.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {
            search();
        }
        public void removeUpdate(DocumentEvent e) {
            search();
        }
        public void changedUpdate(DocumentEvent e) {
            search();
        }
    });
}

private void search() {
    String target = textField.getText();
    for (int row = 0; row < table.getRowCount(); row++)
        for (int col = 0; col < table.getColumnCount(); col++) {
            String next = (String) table.getValueAt(row, col);
            if (next.equals(target)) {
                changeBackgroundColor(row, col);
                return;
            }
        }
    table.repaint();
}

private void changeBackgroundColor(int row, int col) {
    table.setColumnSelectionAllowed(true);
    table.setRowSelectionAllowed(true);
    boolean toggle = false;
    boolean extend = false;
    table.changeSelection(row, col, toggle, extend);
    //first atempt sets bg color for all cells, it is not OK
    //table.setSelectionBackground(Color.green);

    //second atempt getting no result
    table.getCellEditor(row,col).getTableCellEditorComponent(table,table.getValueAt(row,col),true,row,col).setForeground(Color.red);

    //3th atempt getting no result
    //Component c = table.getCellRenderer(row, col).getTableCellRendererComponent(table, table.getValueAt(row, col), true, true, row, col);
    //c.setForeground(Color.red);

    //4th atempt getting no result
    //DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) table.getCellRenderer(row, col).getTableCellRendererComponent(table, table.getValueAt(row, col), true, true, row, col).;
      //renderer.setBorder(new LineBorder(Color.red));
}

   }
最佳回答

您可以使用 XxxCellRenderer , 使用 prepareRenderer () 更好、最容易

正确代码的正确代码,您必须覆盖或测试 内部,如果-else 遵循 pataters

  • 是选中的

  • 焦点

Please to check answers and one question about similair issue, there are two simple ways, sorry I‘m in FRI trafic, brrrrr

问题回答

您需要先将单元格转换器设置为列 -

col.setCellRenderer( new TableCellRenderer() {
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) 
                {
                    Component cell = centerRenderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
    cell.setForeground(Color.green);
}
});




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签