2011-08-01 36 views
6

Vì vậy, tôi nhận được lỗi: "KHÔNG THỂ THAM KHẢO MỘT VÒNG BI TRÒ CHƠI KHÔNG GIAN CUỘC SỐNG TRONG MỘT BÊN TRONG BAO GỒM ĐƯỢC ĐỊNH NGH INA TRONG MỘT PHƯƠNG PHÁP KHÁC BIỆT". Tôi muốn để có thể thiết lập chuỗi roletype để bất cứ điều gì có được lựa chọn trong đó Dropdown. Làm thế nào tôi có thể làm điều này nếu không theo cách tôi đang cố gắng dưới đây, hoặc tôi chỉ đơn giản là làm cho một số lỗi ngu ngốc trong mã tôi đang cố gắng?Không thể tham khảo/sửa đổi biến không phải cuối cùng trong một lớp bên trong

Cảm ơn, Ravin

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class Funclass extends JFrame { 

    FlowLayout layout = new FlowLayout(); 
    String[] skillz = {"Analytical", "Numerical", "Leadership", 
     "Communication", "Organisation", "Interpersonal"}; 
    String[] rolez = {"Developer", "Sales", "Marketing"}; 
    String[] Industries = {"Consulting", "Tech"}; 
    String R1, R2, R3, R4, roletype; 

    public Funclass() { 
     super("Input Interface"); 
     setLayout(layout); 
     JTextField Company = new JTextField("Company Name"); 
     JComboBox TYPE = new JComboBox(Industries); 
     JList skills = new JList(skillz); 
     JComboBox role = new JComboBox(rolez); 
     skills.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
     add(TYPE); 
     add(skills); 
     add(role); 
     add(Company); 

     ROLE.addItemListener(new ItemListener() { 

      public void itemStateChanged(ItemEvent event) { 
       if (event.getStateChange() == ItemEvent.SELECTED) { 
        roletype = rolez[role.getSelectedIndex()]; 
       } 
      } 
     }); 
    } 
} 
+4

Trình biên dịch/IDE có thực sự hét lên thô lỗ với bạn không? – BalusC

+0

Tôi biết nó có ý nghĩa như vậy. Tôi đã tán tỉnh những người khác như hình phạt. – Ravin

Trả lời

2

Bạn cần phải khai báo biến role như final để các lớp bên trong (ItemListener) có thể có quyền truy cập vào nó, như vậy:

final JComboBox role = new JComboBox(rolez); 
+1

Điều này sẽ không hoạt động vì 'roletype' cũng phải được khai báo 'final'. – tskuzzy

+0

Điều đó vẫn không hoạt động vì anh ta sửa đổi 'roletype' trong lớp bên trong;) – tskuzzy

+2

tskuzzy - hạn chế cuối cùng chỉ áp dụng khi truy cập các biến được sắp xếp bên trong phương thức xác định lớp địa phương. Lớp bên trong vẫn có quyền truy cập vào các biến lớp kèm theo – Kal

0

Để truy cập các biến trong lớp ngoài từ một lớp bên trong, chúng phải được khai báo là final. Vì vậy, trong trường hợp này, role phải là final.

EDIT: roletype không cần phải được khai báo final mặc dù nó được truy cập trong lớp bên trong vì nó là một biến lớp, không phải là biến phương thức.

+0

Xin lỗi, tôi đã đọc sai mã và nghĩ 'roletype' được khai báo trong hàm tạo. Tôi đã chỉnh sửa câu trả lời của mình và làm rõ điều đó. – tskuzzy

1
import java.awt.event.*; 
import javax.swing.*; 

public class Funclass extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private String[] rolez = {"Developer", "Sales", "Marketing"}; 
    private String roletype; 
    private JComboBox role; 

    public Funclass() { 
     role = new JComboBox(rolez); 
     role.addItemListener(new ItemListener() { 

      public void itemStateChanged(ItemEvent event) { 
       if (event.getStateChange() == ItemEvent.SELECTED) { 
        roletype = role.getSelectedItem().toString(); 
       } 
      } 
     }); 
    } 
} 
Các vấn đề liên quan