После попытки понять, что происходит в вашем вопросе, я понял, что вы не можете получить выбранный элемент в списке, когда выбор изменяется.
Чтобы представить вам, как этого можно достичь, я построил приведенный ниже пример. Вы можете наблюдать там, когда вызывается каждая часть if else. if(e.getValueIsAdjusting())
выполняется всегда, когда вы перетаскиваете мышью на элементы. Другая часть вызывается, когда вы отпускаете мышь, когда вы предварительно щелкнули по элементу.
В предоставленном вами коде есть серьезные проблемы, поэтому я попытался удалить все ненужное, например,
1. Метод doMyMethod()
и фрагмент кода if(e.getValueIsAdjusting())
, находящийся в нем, никогда не будут вызываться, поскольку вы уже проверяете это условие перед его вызовом. Кроме того, нет необходимости кодировать метод, работающий с событиями слушателя, этот код должен оставаться внутри слушателя, который является приватным. Затем, если вы хотите программно вызвать его код, вы должны вызвать listener.valueChanged (evt).
2. evt.getSource()
возвращает объект, который является автором события, в данном случае myList, а не выбранный элемент, за которым, как мне кажется, вы следовали, для этого используйте getSelectedValue()
для источника или myList напрямую, так как этот слушатель обслуживает только этот список.
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListTest extends JPanel
{
private JScrollPane myScrollPane;
private JList myList;
private ListSelectionListener lSL = new ListSelectionListener()
{
@Override
public void valueChanged(ListSelectionEvent evt)
{
if(evt.getValueIsAdjusting())
{
System.out.println("Eventhandler called evt.getValueIsAdjusting() true");
return;
}
else
{
// String item = (String) evt.getSource();//!!!Exception casting JList to String
//maybe what you need is getSelectedValue()
System.out.println("else called myList.getSelectedValue() ="+myList.getSelectedValue());
}
}
};
private ListTest()
{
int noRows = 25;
Object[] listData = new String[noRows];
for(int i =0; i < noRows; i++)
listData[i]= "Oi "+i;
this.myList = new JList(listData);
this.myScrollPane = new JScrollPane(myList);
myList.addListSelectionListener(lSL);
add(myScrollPane);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
ListTest p = new ListTest();
JPanel contentPane = new JPanel();
contentPane.add(p);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}
Надеюсь, что даже если это не решит вашу проблему, по крайней мере, это поможет нам построить SSCCE .