0

ペインを変更したときにフレームのタイトルを変更したい:

public void changePane(JPanel myNewPane){
    myGui.getContentPane().removeAll();
    myGui.getContentPane().add(myNewPane);
--->myGui.setTitle("Blah");
    myGui.pack();
}

"Blah"入力myNewPaneをマップの値のキーとして使用する値を変更したい場合を除き、次のようにします。

    private Map<? extends JPanel,String> PanelNames = new HashMap<? extends JPanel, String>();

ただし、ここ Eclipse では、「タイプ HashMap をインスタンス化できません」HashMapというエラーで赤い下線が引かれています。

次のように、ペインと文字列をキーと値として追加しようとしています。

public void setPanelNames(Map<? extends JPanel,String> panelNames) {
    PanelNames.put(myTopManagerPane, "Main Manager Page");
    PanelNames.put(myPlayerManagerPane, "Player Manager Page");
    PanelNames.put(myGameManagerPane, "Game Manager Page");
}

ここputに赤い下線が引かれています。ここでの私のエラーは、「タイプ Map のメソッド put(capture#2-of ? extends JPanel, String) は、引数 (TopManagerPane, String) には適用できません」です。

私は何を間違っていますか?

4

1 に答える 1

1

HashMapジェネリック ワイルド カードを使用して を作成することはできません。代わりに具象型を指定する必要があります。

? extendsを定義から削除すると、機能するはずです。

private Map<JPanel,String> PanelNames = new HashMap<JPanel, String>();

public void setPanelNames(Map<JPanel,String> panelNames) {
  ...
}

タイプまたはサブクラスMap<? extends JPanel, String>のキーを使用するすべてのマップを受け入れることを意味することに注意してください (たとえば、 extends の場合)。ただし、呼び出し時に作成する実際のインスタンスは、インスタンスが許可されているか、インスタンスのみが許可されているかを知る必要があるため、ここで使用する必要があります。次に、マップは、キーが型についてより多くを知ることができないことを認識します (その場合は問題になりません)。JPanelMyPanelJPanelnew HashMap<...>()JPanelMyPanelnew HashMap<JPanel, String>()JPanels

method パラメーターで使用すると、aまたは a? extends JPanelを渡すことができますが、許可されているかどうかがわからないため、コンパイラーはマップにパネルを追加できません。a への追加は違法です。Map<JPanel, String>Map<MyPanel, String>JPanelsMap<MyPanel, String>

于 2012-07-17T15:52:45.877 に答える