0

私のGUIには

@Override
public void actionPerformed(ActionEvent ae) { 
state = new JComboBox(EnumStates.values());
state =(JComboBox)ae.getSource()
state.getSelectedItem() //this returns what I want 

次に、EnumStatesを使用するような他のクラスのオブジェクトがあります

CallmeClass obj;

そして、このようにJComboBoxの結果で列挙型の状態を設定しようとすると

  obj.setState(state.getSelectedItem());

コンパイルエラーが発生します

1.必要な状態ですが、オブジェクトが見つかりました

だから私の質問はis there a way to make the setState take as argument state.getSelectedItem() withouth changing the return type of the method setState() or re declaring the enums in the guiです。ありがとう。

4

1 に答える 1

2

の宣言setStateは次のようなものだと思います。

public void setState(State state){
    ...
}

問題は、JComboBoxが型指定されていないことです(少なくともJava7まではそのようでした)。したがってgetSelectedItem()、常にタイプにキャストする必要があるオブジェクトを返します。したがって、アイテムを取得するときにキャストを行うことができます。

obj.setState((State)state.getSelectedItem());

または、メソッド宣言をオブジェクトに変更して、そこでキャストを行うことができます。

public void setState(Object state){
    if(state instanceof State){
        State realState = (State)state;
        ...
    }
}
于 2012-12-20T19:50:02.450 に答える