0

我正在尝试快速学习 java 并寻找一种方法来在我的 java 应用程序中设置许多标签的文本。

我拥有的是一个 java 应用程序,它启动\停止\检查 Windows 服务的状态。我有一个方法,它传递了这些服务名称的数组,并且每个服务都有一个包含其状态的相应标签。例如,DummyService1 包含在数组中,并且有一个名为 txt_DummyService1 的标签。我的方法(简短版)执行以下操作

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

我意识到这不是你这样做的方式,但是有人可以帮助我以最好的方式做到这一点吗?

4

3 回答 3

2

String无法以这种方式从 a 生成“变量”名称。是的,您可能会使用反射,但这已经引发了关于设计质量的问题。

反而。将每个标签放入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

您不能在运行时操作变量名,因为这些变量名仅对编译器可用。解决您的问题的一种方法是保留一个Map<String, JLabel>(假设您正在使用JLabel而不是其他组件)将名称与每个JLabel. 我敢肯定,根据您的代码的确切设计,还有其他几种可能的解决方案。

于 2013-06-21T00:32:20.030 回答