1

私はこれに対する解決策を探していましたが、自分の質問をせずにテーブルに色付きの行を表示させる方法について、さまざまな場所から頭も尻尾も作ることができません。

私が収集したすべての場所から、セルレンダラーを使用する必要がありますが、問題は、それを自分の状況に適用する方法がわからないことです。

したがって、3 つの列を持つ単純な JTable があり、別の変数 (テーブルには表示されません) の値に応じて、各行を緑、黄色、または赤で強調表示したいだけです。

本当に簡単なようですが、どうすればいいのかわかりません。それが役立つ場合、私のテーブルは次のように定義されています。

studentTableModel = new DefaultTableModel(new Object[]{"Name", "StudentNo", "Part"}, 0);
jt_studentTable = new JTable(studentTableModel);
jt_studentTable.getColumnModel().getColumn(2).setPreferredWidth(10);
studentTableModel.addRow(new Object[]{"(empty)", "(empty)", "(empty)"});
JScrollPane jsp_tableScroller = new JScrollPane(jt_studentTable);
jsp_tableScroller.setPreferredSize(new Dimension(200,190));
middleCentrePanel.add(jsp_tableScroller);

コンボ ボックスの選択に応じて、テーブルの行が変わります。

前もって感謝します。

4

4 に答える 4

8

JTable セルの色分け

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;


public class RowRendering {

    private static Object[] columnName = {"Yes", "No"};
    private static Object[][] data = {
            {"Y", "N"},
            {"N", "Y"},
            {"Y", "N"}
    };


    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {

                JFrame frame = new JFrame();
                JTable table = new JTable(data, columnName);
                table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer());
                table.getColumnModel().getColumn(1).setCellRenderer(new CustomRenderer());

                frame.add(new JScrollPane(table));
                frame.setTitle("Rendering in JTable");
                frame.pack();
                frame.setVisible(true);
            }
        };

        EventQueue.invokeLater(r);
    }
}


class CustomRenderer extends DefaultTableCellRenderer 
{
private static final long serialVersionUID = 6703872492730589499L;

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if(row == 0){
            cellComponent.setBackground(Color.YELLOW);
        } else if ( row == 1){
            cellComponent.setBackground(Color.GRAY);
        } else {
            cellComponent.setBackground(Color.CYAN);
        }
        return cellComponent;
    }
}
于 2013-02-25T17:40:04.383 に答える
1

個別の変数 (テーブルには表示されません) の値に応じて、各行を緑、黄色、または赤で強調表示したいだけです。

レンダラーは、テーブル内のデータを操作します。つまり、コンポーネントは、ジョブを実行するために必要なすべての情報を持っている場合にのみ、自分自身をペイントできます。

したがって、何らかの形で情報をテーブルに追加する必要があります。これは、非表示の 4 番目の列を追加することで実行できます。その後、テーブルは引き続き必要な情報にアクセスできます。

次に、 Table Row Rendereringの提案を使用できます。

于 2013-02-25T16:35:37.903 に答える
1

多分これはあなたのために働く:

class MyCellRenderer extends DefaultTableCellRenderer {
     String separatedVariable;
     public MyCellRenderer(String separatedVariable) {
         this.separatedVariable = separatedVariable;
      }

      @Override
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
          Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
          c.setBackground(Color.WHITE);
          c.setForeground(Color.BLACK);
              JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
          if (separatedVariable.equals("YOUR VALUE TO GREEN")) {
              l.setBackground(Color.GREEN);

              return l;
          } else {
                     if (separatedValue.equals("YOUR VALUE TO YELLOW")) {
                          l.setBackground(Color.YELLOW);
                          return l;
                      } else if (separatedValue.equals("YOUR VALUE TO RED")) {
                          l.setBaground(Color.RED);
                          return l;
                      }
               }
              return c;
      }
}
于 2013-02-25T16:48:41.207 に答える