Une JList de JPanel

Résolu
Signaler
Messages postés
4
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
4 janvier 2007
-
Messages postés
4
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
4 janvier 2007
-
Bonjour,

J'ai un petit soucis avec les Jlist. J'arriver a les manipuler avec des elements String mais pas avec des éléments JPanel. Mon code source:

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.Vector;
import java.awt.*;

public class PartitionPanel extends JPanel implements ListSelectionListener
{

/**
*
*/
private static final long serialVersionUID = 5644880888990624676L;
public static JList partochs;
public JScrollPane scrollPane;
public Vector listeItems;

public PartitionPanel()
{
listeItems = new Vector();
listeItems.addElement(new JPanel());
listeItems.addElement(new JPanel());

setLayout(new BorderLayout());

partochs = new JList(listeItems);
partochs.setSelectedIndex(0);
partochs.addListSelectionListener(this);

scrollPane = new JScrollPane(partochs);
add(scrollPane, BorderLayout.CENTER);
}

public void valueChanged(ListSelectionEvent e)
{
// TODO Auto-generated method stub

}
}

Lorsque je compile et excute code, le JScrollPäne s affiche mais j'ai des lignes d'erreurs qui apparaissent pour chaque JPanel de ma JList.
Erreur: "javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX..."

Merci pour vos réponses :)

3 réponses

Messages postés
750
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
23 décembre 2008
20
Salut,
j'avais fait la m^me chose, mais avec des JLabel, JCheckBox. Il faut bien penser à définir un renderer particulier.
Par exemple:
private class JChekBoxListRenderer extends JCheckBox implements ListCellRenderer {
        //Constante de sérialisation
        private static final long serialVersionUID = 1L;
       
        /* (non-Javadoc)
         * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
         */
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            setForeground(list.getForeground());
            setBackground(list.getBackground());
            setSelected(((JCheckBox)value).isSelected());
            setText(((JCheckBox)value).getText());
            return this;
        }       
    }

et pour ta liste, tu fais : setCellRenderer(new JChekBoxListRenderer());

Voilà ^^

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
Messages postés
4
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
4 janvier 2007
1
OK c'est bon j'ai trouvé, je poste mon code final:

package musica;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.Vector;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class PartitionPanel extends JPanel implements ListSelectionListener, MouseListener
{
   
    private static final long serialVersionUID = 5644880888990624676L;
    public static JList partochs;
    public JScrollPane scrollPane;
    public Vector<FeuillePartition> listeItems;
   
    public PartitionPanel()
    {
        super(new BorderLayout());
       
        listeItems = new Vector<FeuillePartition>();
        listeItems.addElement(new FeuillePartition());
        //listeItems.addElement(new FeuillePartition());
       
        partochs = new JList(listeItems);
        partochs.setSelectedIndex(0);
       
        JListRenderer renderer = new JListRenderer();
        partochs.setCellRenderer(renderer);
        partochs.addMouseListener(this);

        partochs.addListSelectionListener(this);

        scrollPane = new JScrollPane(partochs);
       
        add(scrollPane, BorderLayout.CENTER);

    }

    public void valueChanged(ListSelectionEvent e)
    {
       
    }

    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }

    public void mousePressed(MouseEvent e)
    {
        ((FeuillePartition)partochs.getSelectedValue()).mousePressed(e);
    }

    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub
       
    }
}

class JListRenderer implements ListCellRenderer
{
   
    public Component component;
   
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {       
        component = (Component)value;
        if(isSelected)
        {

        }
        return component;
    }
}
Messages postés
4
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
4 janvier 2007
1
Merci pour le coup de main, mes FeuillePartition (JPanel) s'affichent!!
Je poste mon code source pour les autres qui galèrent la dessus:

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.Vector;
import java.awt.*;

public class PartitionPanel extends JPanel implements ListSelectionListener
{
   
    public static JList partochs;
    public JScrollPane scrollPane;
    public Vector<FeuillePartition> listeItems;
   
    public PartitionPanel()
    {
        super(new BorderLayout());
       
        listeItems = new Vector<FeuillePartition>();
        listeItems.addElement(new FeuillePartition());
        //listeItems.addElement(new FeuillePartition());
       
        partochs = new JList(listeItems);
        partochs.setSelectedIndex(0);
       
        JListRenderer renderer = new JListRenderer();
        partochs.setCellRenderer(renderer);

        partochs.addListSelectionListener(this);

        scrollPane = new JScrollPane(partochs);
       
        add(scrollPane, BorderLayout.CENTER);

    }

    public void valueChanged(ListSelectionEvent e)
    {
       
    }
}

class JListRenderer implements ListCellRenderer
{
   
    public Component component;
   
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {       
        component = (Component)value;
        if(isSelected)
        {

        }
        return component;
    }
}

Il me reste un dernier soucis, chaque FeuillePartition implement les Listener MouseListener, MouseMotionListener.
Or depuis que c'est dans une JList ca ne fonctionne plus