0

私はすぐにJavaを手に入れようとしており、Javaアプリで多数のラベルのテキストを設定する方法を探しています.

私が持っているのは、Windows サービスのステータスを開始\停止\チェックする Java アプリです。これらのサービス名の配列が渡されるメソッドがあり、これらの各サービスには、そのステータスを含む対応するラベルがあります。たとえば、配列には DummyService1 が含まれており、txt_DummyService1 というラベルがあります。私の方法(短いバージョン)は次のことを行います

public static void Checker(String Array[])
{
//check status of DummyService1
"txt_"+DummyService.Text = "started";
}

これがあなたのやり方ではないことは承知していますが、これを行うための最良の方法を教えてくれる人はいますか?

4

3 に答える 3

2

この方法でa から「変数」名を生成する方法はありませんString。はい、リフレクションを使用することもできますが、それでは設計の品質に関する疑問が生じます。

その代わり。各ラベルをそのMap名前でキー付けされた に配置します。

private Map<String, JLabel> labelLookup = new HashMap<>(25); // Instance variable.

コンストラクター (または UI を作成する場所) で、各ラベルをMap.

/* Other UI code */
labelLookup.put("DummyService1", txt_DummyService1);

変更を行う必要がある場合は、名前でラベルを検索するだけです

// You had better have a VERY good reason for making this static...
public void checker(String services[])
{
    for (String service : services) {
        JLabel label = labelLookup.get(service);
        if (label != null) {
            label.setText("Started");
        }
    }
}

例えば...

于 2013-06-21T00:17:24.903 に答える
0

実際、私は次のようなものをもっと探していました

public static void Checker()
{
    try
    {
        Object Instance = getClass().getDeclaredField("txt_DummyService").get(this);
        Method m = Instance.getClass().getMethod("setText",String.class);
        m.invoke(Instance,"started");
    }
    catch(Exception e)
    {
    //exception handling
    }
}
于 2013-06-21T00:26:35.700 に答える
0

変数名はコンパイラでのみ使用できるため、実行時に変数名を操作することはできません。問題の解決策の 1 つはMap<String, JLabel>JLabel名前を各JLabel. コードの正確な設計に応じて、他にもいくつかの可能な解決策があると確信しています。

于 2013-06-21T00:32:20.030 に答える