Bonjour

Pour une application j'ai besoin d'appliquer une couleur sur une ligne d'une jtable contenant si cette ligne contient au mot particulier, mais pour l'instant j'arrive a le faire mais le coloriage des lignes es decaler, raison pour laquelle j'ai besoin de votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
 
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableRowSorter;
 
@SuppressWarnings("serial")
public class MainFrame extends JFrame {
 
	private JPanel contentPane;
	private JTable table;
	private Affichage model;
 
	Formulaire2 formulaire2;
	InfosManga info;
	static boolean appel = false;
 
	ConnexionMangaLu con = new ConnexionMangaLu();
 
	JTextField filterText = new JTextField("Rechercher un Manga", 20);
 
	public MainFrame() {
 
		Dimension dimension = java.awt.Toolkit.getDefaultToolkit()
				.getScreenSize();
		int height = (int) dimension.getHeight();
		int width = (int) dimension.getWidth();
		setBounds(-10, 0, width, height);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
 
		JPanel menu = new JPanel();
 
		con.connection();
 
		ArrayList<Manga> mangaList = con.getAllMangas();
		con.close();
		model = new Affichage(mangaList);
 
		table = new JTable();
		table.setAutoCreateRowSorter(true);
		table.setModel(model);
		table.setDefaultRenderer(Object.class, new MonCellRenderer());
		// / contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
		getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
 
		final TableRowSorter<Affichage> sorter = new TableRowSorter<Affichage>(
				model);
		table.setRowSorter(sorter);
		table.setOpaque(true);
		;
 
		String[] items = { "Tous", "Ongoing", "Completed" };
		JButton button = new JButton("Filtrer");
		// button.setOpaque(false);
		JLabel label = new JLabel("Gestion");
 
		GridLayout boutons = new GridLayout(18, 0, 10, 10);
		menu.setLayout(boutons);
		menu.setBorder(BorderFactory.createEmptyBorder(0, 20, 20, 20));
 
		JComboBox<String> combobox = new JComboBox<>(items);
 
		filterText.setSelectionStart(0);
		filterText.setSelectionEnd(filterText.getText().length());
		filterText.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent e) {
				filterText.setText("");
			}
			/*
			 * public void focusLost(FocusEvent e) { if (e.getSource()==button)
			 * { System.out.println("test source");
			 * filterText.setText("Rechercher un Manga"); }
			 * 
			 * }
			 */
		});
		filterText.setOpaque(false);
 
		ItemListener listener = new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					// Affiche des lignes dans une JList selon l’élément sur
					// lequel on clique
 
					if (!combobox.getSelectedItem().toString().equals("Tous"))
						sorter.setRowFilter(RowFilter.regexFilter(combobox
								.getSelectedItem().toString()));
					else {
						sorter.setRowFilter(null);
					}
 
				}
			}
		};
 
		combobox.addItemListener(listener);
 
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String text = filterText.getText().toUpperCase();
				if (text.length() == 0) {
					sorter.setRowFilter(null);
				} else {
					sorter.setRowFilter(RowFilter.regexFilter(text));
				}
			}
		});
 
		// menu.add(new JButton(new AddAction()));
		menu.add(label, BorderLayout.CENTER);
		menu.add(combobox);
		menu.add(filterText, BorderLayout.SOUTH);
		menu.add(button);
		menu.add(new JButton(new RemoveAction()));
 
		getContentPane().add(menu, BorderLayout.WEST);
		setVisible(true);
	}
 
	private class AddAction extends AbstractAction {
		private AddAction() {
			super("Ajouter");
		}
 
		@SuppressWarnings("static-access")
		public void actionPerformed(ActionEvent e) {
			appel = true;
			new Formulaire();
 
		}
	}
 
	private class RemoveAction extends AbstractAction {
		private RemoveAction() {
			super("Supprimer");
		}
 
		@SuppressWarnings("static-access")
		public void actionPerformed(ActionEvent e) {
			int[] selection = table.getSelectedRows();
 
			int ligne = table.getSelectedRow();// recupere le numero de la ligne
												// selectionner
			int colonne = 0;// recuperela 1ere collonne de la ligne selectionner
			Object cellule = table.getValueAt(ligne, colonne);
 
			con.connection();
			if (con.delManga(cellule.toString())) {
				con.close();
				for (int i = selection.length - 1; i >= 0; i--) {
					model.deleteMangaAt(selection[i]);
				}
			}
 
		}
	}
 
	class MonCellRenderer extends DefaultTableCellRenderer {
 
		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			Component cell = super.getTableCellRendererComponent(table, value,
					isSelected, hasFocus, row, column);
 
			Object o = table.getValueAt(row, 3);
			cell.setFont(new Font("Courier New", Font.ITALIC, 15));
 
			if (o != null && cell instanceof JLabel) {
				JLabel label = (JLabel) cell;
				if (label.getText().contains("Completed")) {
					// Color clr = new Color(255, 226, 198);
					cell.setBackground(Color.gray);
				}
				if (label.getText().contains("Ongoing")) {
					cell.setBackground(Color.CYAN);
				}
 
			}
 
			return cell;
		}
	}
 
	public static boolean appelTableau() {
		return appel;
	}
}

et voila ce qu'il me donne comme resultat

Nom : Capture.PNG
Affichages : 1735
Taille : 22,4 Ko

et donc ce que je voudrais c'est que les ligne contenant le terme " Ongoing " est une couleur et ceux avec le terme " Completed " en ai une autre