Bonjour,

Je voudrais afficher un JPanel dans chacune des cases d'un JTable.

Le problème c'est que la méthode qui définis l'affichage est complètement ignorée et le tableau appel la méthode toString pour l'affichage..

Si vous aviez une idée..


Ca c'est ma class qui contient le tableau (JTable0).
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
 
package lo43.graphics;
 
import java.util.ArrayList;
 
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
 
import lo43.game.Item;
import lo43.game.World;
import lo43.plants.Plant;
 
import org.dyno.visual.swing.layouts.Bilateral;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;
import org.dyno.visual.swing.layouts.Trailing;
 
//VS4E -- DO NOT REMOVE THIS LINE!
public class MainFrame extends JFrame {
 
	private static final long serialVersionUID = 1L;
 
	private MyAbstractTableModel tModel;
 
	private JLabel jLabel0;
	private JLabel jLabel1;
	private JLabel jLabel2;
	private JProgressBar jProgressBar0;
	private JPanel jPanel1;
	private JScrollPane jScrollPane0;
	private JTable jTable1;
	private JScrollPane jScrollPane1;
 
	private JList jList0; 
 
 
	public MainFrame(ArrayList<Plant> bList, World world) {
		tModel = new MyAbstractTableModel(world);
		initComponents();
		buildPlantList(bList);
	}
 
	private void initComponents() {
		setTitle("Energy tycoon");
		setLayout(new GroupLayout());
		jList0 = getJList0();
		add(getJPanel1(), new Constraints(new Leading(3, 554, 10, 10), new Leading(2, 45, 10, 10)));
		add(getJScrollPane1(), new Constraints(new Leading(3, 554, 39, 112), new Leading(50, 381, 12, 12)));
		add(getJScrollPane0(), new Constraints(new Trailing(0, 269, 10, 10), new Leading(2, 429, 10, 10)));
		setSize(830, 466);
	}
 
	private JList getJList0(){
		if(jList0==null){
			jList0 = new JList();
			jList0.setCellRenderer(new PlantWidget());
			jList0.setAutoscrolls(false);
		}
		return jList0;
	}
 
	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED, null, null, null, null));
			jScrollPane1.setViewportView(getJTable1());
		}
		return jScrollPane1;
	}
 
	private JTable getJTable1() {
		if (jTable1 == null) {
			jTable1 = new JTable(tModel);
			jTable1.setDefaultRenderer(JPanel.class, new CellPannel());
		}
		return jTable1;
	}
 
	private JScrollPane getJScrollPane0() {
		if (jScrollPane0 == null) {
			jScrollPane0 = new JScrollPane(jList0);
			jScrollPane0.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED, null, null, null, null));
		}
		return jScrollPane0;
	}
 
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jPanel1 = new JPanel();
			jPanel1.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED, null, null, null, null));
			jPanel1.setLayout(new GroupLayout());
			jPanel1.add(getJLabel0(), new Constraints(new Leading(9, 10, 10), new Leading(12, 12, 12)));
			jPanel1.add(getJLabel1(), new Constraints(new Leading(56, 10, 10), new Leading(12, 12, 12)));
			jPanel1.add(getJLabel2(), new Constraints(new Leading(137, 10, 10), new Leading(12, 12, 12)));
			jPanel1.add(getJProgressBar0(), new Constraints(new Bilateral(241, 12, 10), new Leading(12, 12, 12)));
		}
		return jPanel1;
	}
 
	private JProgressBar getJProgressBar0() {
		if (jProgressBar0 == null) {
			jProgressBar0 = new JProgressBar();
			jProgressBar0.setString("0 %");
		}
		return jProgressBar0;
	}
 
	private JLabel getJLabel2() {
		if (jLabel2 == null) {
			jLabel2 = new JLabel();
			jLabel2.setText("Energy Available:");
		}
		return jLabel2;
	}
 
	private JLabel getJLabel1() {
		if (jLabel1 == null) {
			jLabel1 = new JLabel();
			jLabel1.setText("0€");
		}
		return jLabel1;
	}
 
	private JLabel getJLabel0() {
		if (jLabel0 == null) {
			jLabel0 = new JLabel();
			jLabel0.setText("Money: ");
		}
		return jLabel0;
	}
 
	private void buildPlantList(ArrayList<Plant> list){
		DefaultListModel model = new DefaultListModel();
		for(Plant p: list){
			model.addElement(p);
		}
		jList0.setModel(model);
	}
 
}
Ca c'est le JPanel que je veux afficher dans les cases:
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
 
package lo43.graphics;
 
import java.awt.Component;
 
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
 
import lo43.game.Decor;
import lo43.game.Item;
 
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;
 
//VS4E -- DO NOT REMOVE THIS LINE!
public class CellPannel extends JPanel implements TableCellRenderer{
 
	private static final long serialVersionUID = 1L;
	private JLabel jLabel0;
 
	public CellPannel() {
		setOpaque(true);
		initComponents();
	}
 
	private void initComponents() {
		setLayout(new GroupLayout());
		add(getJLabel0(), new Constraints(new Leading(21, 10, 10), new Leading(36, 10, 10)));
		setSize(89, 76);
	}
 
	private JLabel getJLabel0() {
		if (jLabel0 == null) {
			jLabel0 = new JLabel();
			jLabel0.setText("jLabel0");
		}
		return jLabel0;
	}
 
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		Item p = ((Item)value);
		if(p instanceof Decor){
			jLabel0.setText("DECOR");
		}else{
			jLabel0.setText("USINE");
		}
 
		return this;
 
	}
 
}
Et mon model de tableau
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
 
package lo43.graphics;
 
import javax.swing.table.AbstractTableModel;
 
import lo43.game.World;
 
public class MyAbstractTableModel extends AbstractTableModel{
	private static final long serialVersionUID = 1L;
	private World myWorld;
 
	public MyAbstractTableModel(World w) {
		myWorld = w;
	}
 
	@Override
	public int getColumnCount() {
		return myWorld.getDimx();
	}
 
	@Override
	public int getRowCount() {
		return myWorld.getDimy();
	}
 
	@Override
	public Object getValueAt(int x, int y) {
		return myWorld.getItem(x, y);
	}
 
}
Merci d'avance @+
Seeme