Partage
  • Partager sur Facebook
  • Partager sur Twitter

JTable personnalisée

Probleme affichage

    14 décembre 2009 à 22:35:25

    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).
    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:
    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
    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
    • Partager sur Facebook
    • Partager sur Twitter

    JTable personnalisée

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown