Je suis en train de mettre des actions sur un ListSelectionListener personnalisé et bien que tout compile bien passé lorsque je sélectionne en fait un composant du JList il ne fonctionne pas.Java - JList: Custom ListSelectionListener question (SSCCE inclus)
Voici un extrait de code:
public class ListSelectionHandler implements ListSelectionListener
{
ListCustomObject o;
@Override
public void valueChanged(ListSelectionEvent e)
{
o = (ListCustomObject) app.MainWindow.jList1.getModel()
.getElementAt(e.getFirstIndex());
new app.actions.Actions().createSetEdgeColorTo(o.getColor());
}
}
L'action que je fais appel, travaille et il n'y a pas d'erreur lors de la compilation. Mais rien ne se passe réellement.
Je sais que je ne suis pas beaucoup de détails dans y compris ce code, je veux juste demander si je fais une erreur logique dans cet événement.
Merci d'avance!
EDIT: Ajout de l'action et l'initialisation de JList:
public Action createSetEdgeColorTo(Color color)
{
return new SetEdgeColorTo(color);
}
class SetEdgeColorTo extends AbstractAction
{
Color color;
SetEdgeColorTo(Color color)
{
super("Set new Edge Color");
this.color = color;
}
@Override
public void actionPerformed(ActionEvent evt)
{
app.graph.GraphEdit.view.getGraph2D().getDefaultEdgeRealizer()
.setLineColor(color);
app.graph.GraphEdit.view.getGraph2D().updateViews();
}
}
et
JList jList1 = new javax.swing.JList();
ListSelectionModel listSelectionModel = jList1.getSelectionModel();
listSelectionModel.addListSelectionListener(new app.jlist
.ListSelectionHandler());
EDIT 3: Reworked SSCCE:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.Action;
import javax.swing.JFrame;
public class SSCCE
{
static JList jList1;
public static void main(String[] args)
{
JFrame frame = new JFrame();
jList1 = new JList();
ListSelectionModel listSelectionModel = jList1.getSelectionModel();
listSelectionModel.addListSelectionListener(
new ListSelectionHandler());
DefaultListModel listModel = new DefaultListModel();
jList1.setModel(listModel);
listModel.addElement("String");
listModel.addElement("String two");
frame = new JFrame();
frame.setDefaultCloseOperation(1);
frame.add(jList1);
frame.pack();
frame.setVisible(true);
}
}
class ListSelectionHandler implements ListSelectionListener
{
@Override
public void valueChanged(ListSelectionEvent e)
{
System.out.println("" + e.getFirstIndex());
new Actions().createTestAction();
}
}
class Actions
{
public Action createTestAction()
{
return new TestAction();
}
class TestAction extends AbstractAction
{
TestAction()
{
super("Test Action");
}
@Override
public void actionPerformed(ActionEvent evt)
{
System.out.println("Test Action Fired!");
}
}
}
Ce SSCCE décrit le problème exact avec un échantillon TestAction qui ne tire pas encore .
Question évidente, mais avez-vous ajouté une instance de cet écouteur à JList via 'addListSelectionListener'? –
Oui je l'ai bien sûr et je l'ai testé avec quelques "S.out" et ça répond bien. – kxk
Votre SSCCE ne compile pas donc vous ne comprenez toujours pas l'acronyme. Le rendu et l'objet personnalisé sont introuvables. Mais le point est-il nécessaire pour la description de votre problème? Vous essayez d'exécuter du code lorsque la sélection change. Si un rendu personnalisé est pertinent pour ce problème? J'en doute tellement pour m'en débarrasser. L'objet personnalisé est-il pertinent? Encore une fois je doute qu'il suffit d'ajouter des cordes au modèle. Le but du SSCCE est de simplifier tout le monde pour que vous sachiez que vous ne faites pas une erreur idiote. – camickr