2017-10-25 19 views
0

メインクラス:変更色

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; 
    } 

その他のクラス:

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; 
     } 
    } 
    } 

このプログラムが実行されている....が、表示されませんエラー。しかし、コンボボックスでテーブルのデータを編集すると、テーブルの色が実行時に変わることはありません。

この問題の解決方法を教えてください。

+0

[mcve]を投稿すると、問題が解消されます。そのため、ハードコードされたデータを含むシンプルなテーブルを作成し、レンダラーをテーブルに追加します。 – camickr

答えて

0

JTableセルには、レンダラとエディタという2つの側面があります。レンダラーはセルの表示に使用され、エディターはセルの編集時に使用されます。レンダラは終了しましたが、エディタは終了していません。

JTableに、レンダラーと同じ方法で編集されたセルの色を設定するエディターを指定します。例えば。 JTable.setDefaultEditor(Class<?> columnClass, TableCellEditor editor)メソッドを使用します。

+0

私は設計時に列にした – Raj

+0

@Raj質問を編集して[MCVE]を追加することをお勧めします。 –

+0

はい、確かに....私のクエリは非常に簡単です....私はちょうどコンボボックスを介してjtable列を編集し、特定の行の列の値が変更されるとすぐに、その行の背景色ランタイムを変更する。 – Raj