2017-10-25 1 views
0

Haupt-Klasse:Ändern Farbe einer JTable Zeile Laufzeit eine andere Klasse und Methoden

public static void main(String args[]) { 
     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new NewMDIApplication().setVisible(true); 
       new TestTable(); 
      } 
     }); 
    } 

public JTable getMyJTable() { 
     return jTable2; 
    } 

Andere Klasse:

package javaapplication9; 

import java.awt.Color; 
import javax.swing.table.DefaultTableModel; 

public class TestTable extends NewMDIApplication { 
    public NewMDIApplication obj=new NewMDIApplication(); 
    public TestTable() { 
       final DefaultTableModel model = (DefaultTableModel) obj.getMyJTable().getModel(); 
       obj.getMyJTable().setModel(model); 
       obj.getMyJTable().setDefaultRenderer(obj.getMyJTable().getClass(), new MyCellRenderer()); 
       } 

    public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer { 
      public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
      final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
      Object val = table.getValueAt(row, 1); 
      String sval = val.toString(); 
      if (sval.equalsIgnoreCase("A")) { 
       cellComponent.setForeground(Color.black); 
       cellComponent.setBackground(Color.red); 

      } else { 
       cellComponent.setBackground(Color.white); 
       cellComponent.setForeground(Color.black); 
      } 
      if (isSelected) { 
       cellComponent.setForeground(table.getSelectionForeground()); 
       cellComponent.setBackground(table.getSelectionBackground()); 
      } 

      return cellComponent; 
     } 
    } 
    } 

Dieses Programm läuft .... aber nicht angezeigt irgendein Fehler. Wenn ich jedoch einige Daten der Tabelle über das Kombinationsfeld bearbeite, ändert sich die Farbe der Tabelle zur Laufzeit nicht.

Was wäre eine Lösung für dieses Problem?

+0

Veröffentlichen Sie Ihre [mcve], die das Problem aufzeigt. Erstellen Sie eine einfache Tabelle mit fest codierten Daten und fügen Sie den Renderer der Tabelle hinzu. – camickr

Antwort

0

JTable-Zellen haben zwei Aspekte: einen Renderer und einen Editor. Der Renderer wird verwendet, um die Zellen anzuzeigen, der Editor wird verwendet, wenn eine Zelle bearbeitet wird. Sie haben den Renderer erstellt, aber nicht den Editor.

Versehen Sie die JTable mit einem Editor, der die bearbeitete Zelle auf die gleiche Weise wie der Renderer einfärbt. Z.B. über die JTable.setDefaultEditor(Class<?> columnClass, TableCellEditor editor) Methode.

+0

Ich habe es für die Spalte zur Entwurfszeit getan – Raj

+0

@Raj Ich schlage vor, Sie bearbeiten Sie Ihre Frage, und fügen Sie ein [MCVE] dazu. –

+0

Ja, sicher .... Meine Abfrage ist sehr einfach .... Ich möchte nur eine jtable Spalte durch ein Kombinationsfeld bearbeiten und sobald der Wert der Spalte der bestimmten Zeile geändert wird, sollte die Hintergrundfarbe dieser Zeile Laufzeit geändert werden. – Raj

Verwandte Themen