Swing を利用した Java プログラムを作成しようとしています。私が達成しようとしていることの 1 つは、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 は数値を返すことでこれを確認します。ただし、コンストラクターの外では、整数の「インデックス」は認識されないため、userid を呼び出すと、null が返されます。インデックスのコピーを MouseListener の外に置くにはどうすればよいですか?