Java-jList:自定义ListSelectionListener问题(包括SSCE)

Java-jList:自定义ListSelectionListener问题(包括SSCE),java,listener,jlist,Java,Listener,Jlist,我试图在自定义ListSelectionListener上设置一些操作,尽管当我实际选择jList的一个组件时,一切都很好,但它不起作用 下面是一段代码片段: public class ListSelectionHandler implements ListSelectionListener { ListCustomObject o; @Override public void valueChanged(ListSelectionEvent e) {

我试图在自定义ListSelectionListener上设置一些操作,尽管当我实际选择jList的一个组件时,一切都很好,但它不起作用

下面是一段代码片段:

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());
    }

}
我调用的操作正在运行,编译时没有错误。但实际上什么也没发生

我知道我没有在这段代码中包含太多的细节,我只是想问一下,在这个事件中我是否犯了逻辑错误

提前谢谢

编辑:添加了操作和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();
        }
    }

编辑3:返工的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!");
        }
    }
}

此SSCCE描述了再次未触发的样本测试的确切问题

那你到底想做什么

如果试图设置已选定行的颜色,则应在渲染器中执行该代码。通常,无论何时在渲染器中使用颜色,都需要检查:

if (! isSelected)
    //  do you custom rendering
这样,当您选择不同的行时,该行仍将显示默认高亮显示

当然,SSCCE仍然应该发布,因为我们不知道您的自定义操作试图做什么,因此无法提出任何真正的建议

编辑:

它什么都不做,因为您的代码所做的只是创建动作。如果要调用该操作,则代码应类似于:

new Actions().createTestAction().actionPerformed(null);

实际上,不需要创建实际操作,您只需要直接调用一些方法来实现您想要的功能。创建操作的原因是,如果希望将Actdion添加到JButton或JMenuItem,以便用户可以单击组件来调用该操作。

Ok Ok Ok,首先,该操作应该执行与jList完全无关的操作。它应该给一个yFiles封边器一个颜色。问题是,如果没有yFile,您将无法编译和运行SSCCE,我相信这不会有什么帮助。问题是,有没有什么好的理由可以解释为什么在那里实现的这个操作不起作用?如果您向该方法添加System.out.println,并且看到显示,那么代码将被执行。这只是您是否正确实现了代码的问题。您尚未发布该操作的实施情况,因此我们无法判断该操作是否有效。您还没有发布将侦听器添加到组件的代码,因此我们也不知道您是否正确地执行了该操作。正如我在上一篇帖子中告诉你的那样,我们没有时间玩20个问题,猜测你可能忘记了编码什么。正如我在上面回答的,我已经做了所有必要的“s.out”测试,听众正在回答。我不能在这里发布SSCCE,因为我的程序需要一个不是免费的包yFiles,所以这里的大多数人仍然无法编译,但我将编辑我的帖子,并添加更多的片段,如操作和jList初始化。你仍然不理解SSCCE的概念。我不在乎你的yFiles课程。我们的想法是创建一个简短的程序来演示您遇到的问题。因此,您所需要做的就是创建一个简单的操作来显示一些文本,您将证明您正确地实现了该方法并正确地添加了所有侦听器。然后,由你来找出你的实际行动不起作用的原因。根据您发布的更新代码,您可能已经将变量“jList”定义了两次,一次作为类变量,一次作为局部变量。我添加了一个SSCCE。(仍在试图找出其他人需要什么来帮助我解决问题。我没有懈怠或做任何事情)明显的问题,但您是否通过
addListSelectionListener
将此侦听器的实例添加到JList?是的,我当然有,我已经用一些“S.out”进行了测试它的响应很好。你的SSCCE没有编译,所以你仍然不理解缩写词。未找到渲染器和自定义对象。但问题是,它们对您的问题描述是必要的吗?当选择更改时,您正试图执行某些代码。如果自定义渲染器与此问题相关?我怀疑,所以把它扔掉。自定义对象是否相关?我再次对此表示怀疑,所以只需在模型中添加字符串即可。SSCCE的目的是简化每件事,这样你就不会犯愚蠢的错误。
new Actions().createTestAction().actionPerformed(null);