2011-08-01 9 views
6

エラーが発生しました。「異なるメソッドで定義された内部の内部では、最終的な可変的な役割を参照できません。私はその文字列のroletypeをそのドロップダウンで選択されたものに設定できるようにしたい。私が下にしようとしている方法ではない場合、これを行うにはどうすればよいですか、私は単に私が試しているコードでいくつかのばかげたエラーを作りますか?あなたは内部クラス(ItemListenerが)のようなので、それへのアクセス権を持つことができるようにfinalとしてrole変数を宣言する必要が内部クラスの最終的ではない変数を参照/変更できません

おかげで、 ラヴィン

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

コンパイラ/ IDEは本当にあなたに無礼を叫びましたか? – BalusC

+0

私はその意味を知っています。私は罰として他の人たちと一緒に遊んでいた。 – Ravin

答えて

2

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

'roletype'も' final'宣言しなければならないので、これは動作しません。 – tskuzzy

+0

内部クラスの 'roletype'を修正しているので、これはまだ動作しません; – tskuzzy

+2

tskuzzy - ローカルクラスを定義するメソッドの内部でスコープされた変数にアクセスする場合、最後の制限が適用されます。内部クラスはまだ囲まれているクラス変数にアクセスしています – Kal

0

アクセスするには内部クラスの外部クラスの変数は、finalと宣言する必要があります。この場合、rolefinalである必要があります。

EDIT:roletypeは、メソッド変数ではなくクラス変数であるため、内部クラスでアクセスされてもfinalと宣言する必要はありません。

+0

申し訳ありませんが、私はコードを誤読し、 'roletype'もコンストラクタで宣言されたと考えました。私はそれ以来、私の答えを編集し、それを明確にしました。 – 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(); 
       } 
      } 
     }); 
    } 
} 
関連する問題