2013-03-26 3 views
-1

примечание: этот код не мой, я взял его с другого сайта, и я просто пытаюсь его изменить.Настройка моей ячейки Renderer, чтобы изменить один цвет клеток?

У меня есть JTable с загрузкой деталей, но я хочу, чтобы при изменении конкретной ячейки для первой ячейки менялся цвет. В настоящее время этот код просто выделяет строку, когда я нажимаю на нее, но я хочу, чтобы, если я изменил одно из значений на другой номер, ячейка имени, например, изменит красный цвет. Я пробовал несколько вещей (если заявления), но не может работать. Любая помощь будет большой.

import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.*; 

public class CustomCellRenderer{ 
    JTable table; 
    TableColumn tcol; 
    public static void main(String[] args) { 
    new CustomCellRenderer(); 
    } 

    public CustomCellRenderer(){ 
    JFrame frame = new JFrame("Creating a Custom Cell Reanderer!"); 
    JPanel panel = new JPanel(); 
    String data[][] = {{"Vinod","Computer","3"}, 
    {"Rahul","History","2"}, 
    {"Manoj","Biology","4"}, 
    {"Sanjay","PSD","5"}}; 
    String col [] = {"Name","Course","Year"}; 
    DefaultTableModel model = new DefaultTableModel(data,col); 
    table = new JTable(model); 
    tcol = table.getColumnModel().getColumn(0); 
    tcol.setCellRenderer(new CustomTableCellRenderer()); 
    tcol = table.getColumnModel().getColumn(1); 
    tcol.setCellRenderer(new CustomTableCellRenderer()); 
    tcol = table.getColumnModel().getColumn(2); 
    tcol.setCellRenderer(new CustomTableCellRenderer()); 
    JTableHeader header = table.getTableHeader(); 
    header.setBackground(Color.yellow); 
    JScrollPane pane = new JScrollPane(table); 
    panel.add(pane); 
    frame.add(panel); 
    frame.setSize(500,150); 
    frame.setUndecorated(true); 
    frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    } 

    public class CustomTableCellRenderer extends DefaultTableCellRenderer{ 
    public Component getTableCellRendererComponent (JTable table, 
Object obj, boolean isSelected, boolean hasFocus, int row, int column) { 
    Component cell = super.getTableCellRendererComponent(
    table, obj, isSelected, hasFocus, row, column); 
    if (isSelected) { 
    cell.setBackground(Color.green); 
    } 
    else { 
    if (row % 2 == 0) { 
    cell.setBackground(Color.lightGray); 
    } 
    else { 
    cell.setBackground(Color.lightGray); 
    } 
    } 
    return cell; 
    } 
    } 
} 
+0

Код, кажется, не содержит часть, которую вы хотите достичь? Средство визуализации ничего не делает, кроме полос, сначала реализует его цвет, зависящий от значения, которое должно определять визуальные эффекты, а затем обязательно перерисуйте ячейки, которые нуждаются в перекраске. – kleopatra

ответ

1

Если вы знаете номер строки, вы хотите, чтобы выделить только добавить в конце метода getTableCellRendererComponent

if (row==theRowNumberToHighlight && column=0) { 
    cell.setForeground(Color.red); 
} 
+0

Я хочу, чтобы он выделял только ячейку «динамически». Поэтому, если значение изменяется в конкретной ячейке, тогда цвет конкретной ячейки изменяется ... – 2013-03-26 13:01:02

+0

Итак, вы должны знать, где значение изменяется и какова строка/столбец измененного значения – StanislavL

1

Если предположить, что модель таблицы расширяет AbstractTableModel, расширить TableModelListener. Используйте следующий tableChanged метод, чтобы выяснить, когда для вызова рендерер:

public void tableChanged(TableModelEvent e) 
{ 
    if (e.getColumn() == columnYouAreChecking && e.getFirstRow() == rowYouAreChecking && e.getLastRow() == rowYouAreChecking) 
    { 
     // Change cell color here. 
    } 
} 

Этот код будет вызываться каждый раз, когда данные в ваших изменений таблицы.

+0

нет, средство визуализации должно быть полностью пассивный, просыпающийся только по просьбе штампа ячейки. – kleopatra

+0

Спасибо, kleopatra. Я вынул ссылку на то, чтобы прослушать прослушиватель в самом рендерере. –

+0

ладно, спасибо :-) – kleopatra

Смежные вопросы