JList中添加了ListSelectionListener,每次打印出当前所选的索引,可是为什么每次鼠标点击后会ListSelectionListener会响应两次?我一开始以为是先将当前所选项置为空,然后将当前所选项置为目标值,但是从打印结果来看,centerList.getSelectedIndex()并未返回-1import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Test extends JFrame
{
JList centerList = new JList();
public Test()
{
String[] s = {"a", "b", "c"};
centerList.setListData(s);
centerList.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
System.out.println(centerList.getSelectedIndex());
}
});
add(centerList);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(400, 400));
pack();
setVisible(true);
}
public static void main(String[] args)
{
new Test();
}
}
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Test extends JFrame
{
JList centerList = new JList();
public Test()
{
String[] s = {"a", "b", "c"};
centerList.setListData(s);
centerList.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
System.out.println(centerList.getSelectedIndex());
}
});
add(centerList);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(400, 400));
pack();
setVisible(true);
}
public static void main(String[] args)
{
new Test();
}
}
下面可以。import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.MouseEvent;public class JFrameDemo extends JFrame
{
JList centerList = new JList();
boolean flag = false; //鼠标是否按下的标志
public JFrameDemo()
{
String[] s = {"a", "b", "c"};
centerList.setListData(s);
centerList.addListSelectionListener(new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
if(flag == true) {//仅当鼠标按下时执行打印动作
System.out.println(centerList.getSelectedIndex());
flag = false;
}
}
});
centerList.addMouseListener(new MouseAdapter() {
public void mousePressed (MouseEvent e) {
flag = true;
}
});
add(centerList);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(400, 400));
pack();
setVisible(true);
}
public static void main(String[] args)
{
new JFrameDemo();
}
}