0

はい、それは不可能です。しかし問題は、私が本当にそれをする必要があるということです。トラップ全体を説明します。

public class MainMethods {

ArrayList arrayOfValues; // << PROBLEM

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    arrayOfValues = new ArrayList();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, Object value) {
    matrix.put((String) object, arrayOfValues.add(value));
}

void removeFromMatrix(String key) {
    matrix.remove(key);
}}

それが私のクラスで、それらが私のメソッドです。キーが文字列で、その値がオブジェクトである HashMap を作成しました。ものすごく単純。

本当の問題は、この「オブジェクト」を値として何をしようとしているのかということです。「sendKeyToMatrix」を呼び出すGUIとボタン、およびそれに値をアタッチする別のボタンがあります。両方ともtextFieldsからです。HashMaps の ".put()" メソッドにはオブジェクトが必要であり、最初にキーのみを作成する必要があるため、2 番目の引数は "null" または THE PROBLEM (ArrayList) です。

完璧なソリューション:

public class MainMethods {

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    ArrayList arrayOfValues = new ArrayList();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, Object value) {
    matrix.put((String) object, ghostOrigin.add(value));
}

void removeFromMatrix(String key) {
    matrix.remove(key);
}}

ボタンで「sendKeytoMatrix」を呼び出すと、値として空のArrayListを持つキーが作成されます。このキーは JList に追加されます。次に、2 番目のボタンを呼び出すときに (JList で何が選択されているかを考慮して)、ArrayList に要素を追加します。

2 番目のボタンのコード:

btnInsertContent.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            mainMethods.attachValueToKey(mainList.getSelectedValue(), textContent.getText());
            mainCombo.addItem(textContent.getText());
            System.out.println(mainMethods.matrix);

        }
    });

「attachValueToKey」の 2 番目の引数は、textField によって指定された文字列を受け取り、大きな問題に到達します。

「sendKeyToMatrix」メソッド内のArrayListに追加することはできませんが、これは明らかですが、変数をフィールドとして宣言すると(他のスコープでアクセスできるようにするため)、これは大きな問題です、 私にはわからない、間違った難解なミステリアスな結果が得られます。

簡単な質問でこれを再開します。他のメソッド内の変数にアクセスするにはどうすればよいですか?

「attachValueToKey」内で変数を宣言すると、ボタンが押されるたびに ArrayList 内に ArrayList が作成されます。

さて、私は助けてくれてありがとう。おそらく、インスタンスなどを使って、オブジェクト指向の魔法で解決策を呼び出す方法があるはずです。

4

2 に答える 2

2

このようなものがあなたの質問に答えるはずです:

void attachValueToKey(Object object, Object value) {
    ArrayList a = matrix.get((String) object);
    a.add(value));
}
于 2013-05-04T18:23:25.110 に答える
1

学習のために、Lazarus のおかげで見つけた解決策をここに残しておきます。

public class MainMethods {

HashMap<String, Object> matrix = new HashMap<String, Object>();

void sendKeyToMatrix(String key) {
    ArrayList<Object> arrayOfValues = new ArrayList<Object>();
    matrix.put(key, arrayOfValues);
}

void attachValueToKey(Object object, String value) {
    ArrayList<String> arrayInMatrix = (ArrayList<String>) matrix.get(object);
    arrayInMatrix.add(value);
    matrix.put((String) object, arrayInMatrix);
}

void removeFromMatrix(String key) {
    matrix.remove(key);
} }

ボタンのアクション:

btnInsertContent.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            mainMethods.attachValueToKey(mainList.getSelectedValue(), textContent.getText());
            mainCombo.addItem(textContent.getText());
            System.out.println(mainMethods.matrix);

        }
    });
于 2013-05-04T19:19:57.283 に答える