Я сделал JTable, который содержит данныеJTable визуализатор цвет избежать инвертный цветов
"Марк", "Caissier", "0" "Жюльен", "Caissier", "1" "Джейсон", "Danceur", "2" "Мари", "Danceur", "3" "Джон", "Vendeur", "4"
для того чтобы увидеть все рабочие места легко, я хотел бы нарисовать один цвет по работе. Alternativly
Пример: Строка 0: цвет серый (потому что работа Caissier) Строка 1: цвет серый (потому что работа Caissier) Строка 2: розовый цвет (потому что работа изменилась Danceur) Ряд 3: цвет розовый (потому что работа снова Danceur) Строка 4: цвет серый (потому что работа Vendeur ...)
Кажется, работает, но я не знаю, почему, когда я нажимаю на строка, визуализатор снова вызван, а цвет меняется, а затем он не работает.
Итак, я решил вызвать jtable.repaint каждый раз, когда пользователь нажимает на строку. Но я делаю это, есть плохое событие. Все ряды, которые были розовыми, стали серыми, и весь ряд, который был серым, стал розовым. Я вставляю фрагмент кода. Вы видите ошибку, если вы запускаете JtableColor.java, а затем Жмите на ид 4, например, а затем нажмите на ид 2.
я поставил точку останова и пытается решить мою проблему , Я не нашел решения.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class JtableColor {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = {
{ "Marc", "Caissier", "0" },
{ "Julien", "Caissier", "1" },
{ "Jason", "Danceur", "2" },
{ "Marie", "Danceur", "3" },
{ "John", "Vendeur", "4" } ,
};
Object columnNames[] = { "Prenom", "Job", "Id" };
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
rendererColor jtca1 = new rendererColor();
for (int i=0;i<table.getColumnCount();i++){
table.getColumnModel().getColumn(i).setCellRenderer(jtca1);
}
table.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
JTable table = (JTable) evt.getSource();
table.repaint();
}
});
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
class rendererColor extends DefaultTableCellRenderer {
private String valueToString = "";
int colAScruter=-1;
int couleur =0;
Color couleurAMettre =Color.GREEN;
Hashtable hash= new Hashtable();
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int columnt) {
Component c =
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus,
row, columnt);
//Association d'une couleur à la table
int rowCount = table.getRowCount();
String jobBefore = (String) hash.get("jobBefore");
Vector listeCouleur = new Vector();
listeCouleur.add(0,Color.PINK);
listeCouleur.add(1,Color.LIGHT_GRAY);
couleur = (Integer) hash.get("couleur");
boolean change= true;
String job= (String) table.getValueAt(row,1);
if (jobBefore.equals("")){
setBackground((Color)listeCouleur.get(couleur));
}
else if (job.equals(jobBefore)){
setBackground((Color)listeCouleur.get(couleur));
}
else{
if (couleur == 0) couleur=1;
else if (couleur == 1) couleur=0;
setBackground((Color)listeCouleur.get(couleur));
}
hash.put("jobBefore",job);
hash.put("couleur",couleur);
return c;
}
public rendererColor() {
super();
hash.put("jobBefore", "");
hash.put("couleur",0);
}
}
'Для того, чтобы легко увидеть все вакансии, я хотел бы нарисовать один цвет по заданию. Тогда почему бы не цвет, основанный на значении в этом столбце?Прямо сейчас кажется, что ваш рендеринг зависит от предыдущего рендеринга, а не от фактических значений – copeg
здесь У меня есть несколько вопросов о – mKorbel