-1

注: このコードは私のものではありません。別のサイトから取得したもので、単に変更しようとしているだけです。

私は多くの詳細を含む JTable を持っていますが、最初のセルの特定のセルを変更すると色が変わるようにしたいのです。現在、このコードは行をクリックすると強調表示されるだけですが、値の1つを別の数値に変更すると、たとえば名前のセルが赤に変わるようにしたいです。いくつかのこと (if ステートメント) を試しましたが、うまくいかないようです。どんな助けでも素晴らしいでしょう。

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

2 に答える 2

1

強調表示する行番号がわかっている場合は、 getTableCellRendererComponent メソッドの最後に追加するだけです

if (row==theRowNumberToHighlight && column=0) {
  cell.setForeground(Color.red);
}
于 2013-03-26T12:59:19.810 に答える
1

テーブル モデルが AbstractTableModel を拡張すると仮定すると、TableModelListener を拡張します。次の tableChanged メソッドを使用して、レンダラーをいつ呼び出すかを判断します。

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

このコードは、テーブル内のデータが変更されるたびに呼び出されます。

于 2013-03-26T13:22:05.900 に答える