Tôi đang cố gắng tạo một mảng các JLabels, tất cả chúng sẽ bị ẩn khi được nhấp. Vấn đề xảy ra khi cố gắng thiết lập trình lắng nghe chuột thông qua một lớp bên trong cần truy cập vào biến lặp của vòng lặp được sử dụng để khai báo các nhãn. Mã là tự giải thích:truy cập vào biến trong lớp bên trong trong java
for(int i=1; i<label.length; i++) {
label[i] = new JLabel("label " + i);
label[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
label[i].setVisible(false); // compilation error here
}
});
cpane.add(label[i]);
}
Tôi nghĩ rằng tôi có thể khắc phục điều này bằng cách sử dụng this
hoặc có thể super
thay vì tiếng gọi của label[i]
bên trong phương thức bên trong nhưng tôi đã không thể tìm nó ra.
Lỗi biên dịch là: biến cục bộ i được truy cập từ bên trong lớp bên trong; cần phải được khai báo cuối cùng`
Tôi chắc chắn rằng câu trả lời phải là điều gì đó thực sự ngớ ngẩn mà tôi chưa từng nghĩ đến hoặc có thể tôi đang mắc phải một số sai lầm nhỏ.
Bất kỳ trợ giúp sẽ được đánh giá
Các lỗi này là: 'biến cục bộ i được truy cập từ bên trong lớp bên trong; cần được khai báo final' – omtinez
@omtinez: thì có lẽ bạn nên khai báo biến đó là 'final', không? (xem [Hỏi đáp này] (http://stackoverflow.com/questions/3045130/constructors-in-inner-classes-implementing-interfaces), cũng) –
@Matt Ball, không phải là một ý kiến hay có biến lặp 'final'. –