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

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

如果您对此感到困惑,请查看下面的屏幕截图,以更好地了解自己。



和往常一样,感谢您的支持。

克里斯

最佳答案

诀窍是如何从“运行脚本”操作获取屏幕的表单环境。可以包含表单组件的屏幕是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);
        }
    });
}


到“安装程序->自定义代码和资源”步骤(install4j 6+)上的静态代码,然后调用

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


在“运行脚本”操作中。



为了设置图标,您必须在一个标签组件上定义“ Icon”属性,并使用“ Initialization script”属性将其保存在上下文中并从标签中删除:

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


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

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

关于java - install4j:更改标签颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31391194/

10-13 03:04