jea*_*par 2 java swing jtable tablecellrenderer
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
public class Fenetre extends JFrame implements TableCellRenderer {
private static TableCellRenderer tcr;
public Fenetre(TableCellRenderer tcr){
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Liste des PC de la DTARS");
this.setSize(500, 250);
Object[][] data = {
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","A REMPLACER","24"},
{"nomPc", "PC Fixe", "xxxx","A REMPLACER","24"},
{"nomPc", "PC Portable", "xxxx","OK","NA"},
{"nomPc", "PC Portable", "xxxx","OK","NA"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
{"nomPc", "PC Fixe", "xxxx","OK","24"},
};
String title[] = {"Nom Machine", "Type", "Utilisateur","Etat","Ecran"};
JTable tableau = new JTable(data, title);
//tableau.setBackground(Color.cyan);
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
tableau.getColumn("Type").setCellRenderer( rightRenderer );
tableau.getColumn("Utilisateur").setCellRenderer( rightRenderer );
tableau.getColumn("Etat").setCellRenderer( rightRenderer );
tableau.getColumn("Ecran").setCellRenderer( rightRenderer );
tableau.setAutoCreateRowSorter(true);
this.getContentPane().add(new JScrollPane(tableau));
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = this.tcr.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if ((row & 1) == 0) { // Ligne paire
comp.setBackground(Color.RED);
} else { // Ligne impaire
comp.setBackground(Color.BLUE);
}
return comp;
}
public static void main(String[] args){
Fenetre fen = new Fenetre(tcr);
fen.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在与上面的代码作斗争.能否请您解释一下有什么问题以及如何解决不改变颜色的线条.
您的代码有两个问题:
您DefaultTableCellRenderer为表的列设置了一个新的而不是this.请注意,您的Fenetre类是一种重写
getTableCellRendererComponent(...)方法,以便更改单元格背景颜色.
您的getTableCellRendererComponent(...)实现将作业分解为创建tcr类成员的渲染器组件,该组件是a TableCellRenderer并且未初始化.所以你会得到一个
NullPointerException
怎么解决?
只需提供正确的TableCellRenderer实施.我不会让类直接实现接口,我摆脱了tcr类成员,我提供了这样的DefaultTableCellRenderer重写getTableCellRendererComponent(...):
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if ((row % 2) == 0) { // Ligne paire
comp.setBackground(Color.RED);
} else { // Ligne impaire
comp.setBackground(Color.BLUE);
}
return comp;
}
};
renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
tableau.getColumn("Type").setCellRenderer(renderer);
tableau.getColumn("Utilisateur").setCellRenderer(renderer);
tableau.getColumn("Etat").setCellRenderer(renderer);
tableau.getColumn("Ecran").setCellRenderer(renderer);
Run Code Online (Sandbox Code Playgroud)