0

2次元のint配列で構成されたグリッドがあります。

基本的に00、01、02などが含まれているので、詳細を説明する必要はありません。

グリッドの位置を抽出し、文字列ビルダーを使用して文字列を操作して「jxy」に変更する方法があります(x =グリッド内のx位置、y =グリッド内のy位置)。

    public String getXYstring() {
        int x = getX();
        int y = getY();
        StringBuilder sb = new StringBuilder();
        sb.append("j");
        sb.append(x);
        sb.append(y);
        String posXY = sb.toString();
        return posXY;
    }

したがって、たとえばx=1およびy=3の場合、メソッドは「j13」を生成します。

私のすべてのjLabelは次のように名前が付けられ、グリッドは8x8であるため、j00、j01、j02 ... j07、j10、j11などの名前が付けられます。

この生成された文字列を使用してラベルを操作するにはどうすればよいですか?

たとえば、setTextを使用してjLabelのテキストを変更したい場合、これをどのように行いますか?

通常は次のようになります。

j13.setText("Hello");

ただし、メソッドから「j13」の部分を渡したいのですが。

同様に、これをsetTextの使用だけに制限したくないので、ラベル内の色/背景を変更できるようにする必要もあります。

これが私が達成しようとしていることをあまり混乱させないことを願っています!

4

1 に答える 1

2

文字列を使用して変数名を付けることはできませんが、さらに重要なことは、そもそも変数名はそれほど重要ではないため、そうしたくないということです。代わりに、おそらく JLabel の配列 (1 次元または 2 次元) を使用して配列インデックスからラベルを取得するか、HashMap<String, JLabel>

HashMap を使用する場合は、最初にその put メソッドを使用して String/JLabel のペアを入力する必要があります。次に、String をキーとして使用して、対象の JLabel を抽出できます。

myMap.get("j13").setText("hello");

またはメソッド内の場合、

public void setLabelText(String labelKey, String text) {
  myMap.get(labelKey).setText(text);
}

あなたは次のように呼びます:

setLabelText("j13", "Hello);

すべてのキー文字列が一意であることを確認してください。そうでない場合、これは失敗します。

これに関して:

同様に、これを setText の使用だけに制限したくありません。ラベル内の色/背景も変更できるようにする必要があります。

クラス フィールドをクラスの外部に直接公開するのではなく、外部のクラスが呼び出すことができるパブリック メソッドを使用することをお勧めします。これにより、プライベート フィールドを保持するクラスが、外部のクラスが実行できることをより完全に制御できるため、望ましくない副作用。

于 2013-02-26T17:18:25.013 に答える