Невозможно сослаться / изменить неконечную переменную во внутреннем классе - PullRequest
6 голосов
/ 01 августа 2011

Таким образом, я получаю сообщение об ошибке: «НЕ МОЖЕТ ОТНОСИТЬСЯ К НЕФИНАЛЬНОЙ ПЕРЕМЕННОЙ РОЛИ ВНУТРИ ВНУТРЕННЕГО КЛАССА, ОПРЕДЕЛЕННОГО РАЗНЫМ МЕТОДОМ».Я хочу иметь возможность установить строковый ролевой тип для того, что выбрано в этом выпадающем списке.Как я могу это сделать, если не так, как я пытаюсь описать ниже, или я просто делаю какую-то глупую ошибку в коде, который пытаюсь сделать?

Спасибо, Равин

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()];
                }
            }
        });
    }
}

Ответы [ 3 ]

2 голосов
/ 01 августа 2011

Вам необходимо объявить переменную role как final, чтобы внутренний класс (ItemListener) мог иметь к ней доступ, например:

final JComboBox role = new JComboBox(rolez); 
1 голос
/ 02 августа 2011
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();
                }
            }
        });
    }
}
0 голосов
/ 01 августа 2011

Чтобы получить доступ к переменным во внешнем классе из внутреннего класса, они должны быть объявлены final. Так что в этом случае role должно быть final.

РЕДАКТИРОВАТЬ: roletype не нужно объявлять final, даже если к нему обращаются во внутреннем классе, потому что это переменная класса, а не переменная метода.

...