install4j:更改标签颜色

时间:2015-07-13 18:51:38

标签: java bash install4j

我有三个Run executable or batch file个动作,它们分别调用我的启动脚本,尾部进入日志文件,并验证每个服务是否已完全启动。我会在install4j中使用本机启动操作,但这些服务需要按顺序启动 - 同步 - 每个服务最多需要30秒。

在每个操作之后,我有一个Run script操作,用于验证返回代码并确定其余脚本是否也应该执行。在表单本身上,它显示已安装的组件,我想添加一个图标,并在成功启动后更改每个标签的颜色。

如果这让您感到困惑,请参阅下面的屏幕截图以获得更好的信誉。

screen shot install4j

一如既往,感谢您的支持。

克里斯

1 个答案:

答案 0 :(得分:1)

诀窍是如何从"运行脚本"获取屏幕的表单环境。行动。可以包含表单组件的屏幕是com.install4j.api.screens.FormPanelContainer的实例,该类提供对com.install4j.api.formcomponents.FormEnvironment的访问权。

在"运行脚本"行动,你可以这样做:

import java.awt.EventQueue;
import java.awt.Color;

EventQueue.invokeLater(new Runnable() {
    public void run() {
        FormEnvironment formEnvironment = 
            ((FormPanelContainer)context.getScreenById("screenId")).getFormEnvironment();
        JComponent label = (JComponent)formEnvironment.getFormComponentById("componentId").
             getConfigurationObject();
        label.setForeground(Color.MAGENTA);
    }
});
return true;

使用" screenId"的适当值和" componentId"。

更可重复使用的解决方案

import java.awt.EventQueue;
import java.awt.Color;

public static void changeColor(final String screenId, final String componentId, 
                               final Color color, final Context context) 
{
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            FormEnvironment formEnvironment = 
               ((FormPanelContainer)context.getScreenById(screenId)).getFormEnvironment();
            JComponent label = (JComponent)formEnvironment.getFormComponentById(componentId).
                getConfigurationObject();
            label.setForeground(color);
        }
    });
}

到"安装程序 - >自定义代码&资源" step(install4j 6+)并调用

changeColor("screenId", "componentId", java.awt.Color.GREEN, context);

在你的"运行脚本"动作。

要设置图标,您必须定义"图标"一个标签组件上的属性,并使用"初始化脚本"要在上下文中保存它并将其从标签中删除的属性:

context.setVariable("checkIcon", configurationObject.getIcon());
configurationObject.setIcon(null);

然后在上述代码段中调用label.setForeground();之后,您可以调用

    label.setIcon((Icon)context.getVariable("checkIcon"));