我正在尝试使用Swing创建一个Java程序。我正在尝试完成的一件事是使用MouseListener获取JList中单击项的索引,并检索与数组索引关联的变量。我的问题是,当我尝试在MouseListener之外调用变量时,它不会被识别。我的代码是:
public class UserListPanel extends JPanel {
LibraryController ctrl = new LibraryController();
JScrollPane scrollpane;
public int userid;
public String userName;
public UserListPanel(final Borrower[] borrowersArray) {
String userArray [] = new String [borrowersArray.length];
for (int i = 0; i < userArray.length; i++) {
userArray[i] = borrowersArray[i].getName();
}
JList userList = new JList(userArray);
scrollpane = new JScrollPane(userList);
this.add(scrollpane);
// Adds a mouse click listener to assign values from the JList to a variable on click
userList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
JList userList = (JList)evt.getSource();
if (evt.getClickCount() >= 0) {
int index = userList.locationToIndex(evt.getPoint());
ListModel dlm = userList.getModel();
Object item = dlm.getElementAt(index);
userList.ensureIndexIsVisible(index);
userid = borrowersArray[index].getbID();
userName = borrowersArray[index].getName();
JOptionPane.showMessageDialog(null, userName);
}
}
});
}
userid = borrowersArray[index].getbID();
}
在MouseListener构造函数中,我能够正确获取变量并将其存储在userid变量中,例如,我的JOptionPane通过返回一个数字来确认。 Hoewever,在构造函数之外,整数“索引”无法识别,因此如果我要调用userid,它将返回null。我如何获得MouseListener之外的索引副本?
答案 0 :(得分:1)
如果您想要index
mouseClicked
方法(不是构造函数),那么您应该在mouseClicked
方法之外对其进行初始化,并在mouseClicked
方法中为其指定一个值,然后你就可以在构造函数之外得到index
。
您在index
方法中声明并初始化mouseClicked
,以便变量的范围达到mouseClicked
方法,因此在其范围之外,即在{{1}之外,它不可用方法。
mouseClicked
答案 1 :(得分:0)
index
变量在MouseListener
实现中声明。因此,编译器不了解您尝试访问它的任何index
变量。
要解决此问题,请尝试在Listener实现之外声明index
。
实施例
public class UserListPanel extends JPanel {
LibraryController ctrl = new LibraryController();
JScrollPane scrollpane;
public int userid;
public String userName;
public int index ; //declare it as a global (member) variable
...
}