简介
操作是我对向TrackMate添加随机功能问题这个粗略解决方案,而增加过多更改GUI。添加按钮、对话框或额外的面板很麻烦,我认为这使GUI变得复杂,而GUI本来应该很简单。TrackMate操作是解决此问题的一种指示方法。您必须记住,这是随机功能想法的占位符,并提供了一种快速而干净的方法来测试它们。
TrackMate 操作采用 GUI 最后一个面板的下拉列表中的用户项目的形式。它可以做任何事情,因为我们将所有内容传递给操作,甚至是对 GUI 本身的引用。感谢SciJava发现机制,我们不必担心将其添加到 GUI 上:它会自动列在操作列表中。这种简单性的缺点是您无法使用它来提供的详细交互机制,例如您可以在视图中找到该机制。
在本教程中,我们将使用它来启动我们在本系列第 §§7§§§ 中创建的事件记录器。如果您还记得,我们在上一段时间中看到了如何使用 visible = false 参数和 SciJava 注释将其视图菜单中隐藏。从而阻止用户访问它。没有问题,我们现在将构建一个操作,将其作为视图启动的补充。
TrackMateAction界面
TrackMate 中的动作行为将其集成分为两类。该行为由 TrackMateActionFactory 接口描述组成。集成由 TrackMateModule 接口控制,该接口扩展了 TrackMateActionFactory 接口。
SciJava参数回顾
工厂本身并没有指定。这是必须注释的类
@Plugin( type = TrackMateActionFactory.class )
所有 SciJava 注释参数均适用,它们具有以下含义:
enabled = true/false参数是否控制启用该操作。禁用该操作直至没有被实例化。visible = true/false参数确定该操作是否在操作面板中注册。如果为 false,则创建自定义操作工厂,但相应的操作不会在操作面板中注册,从而阻止任何使用。priority = double参数此处仅用于特定操作项在列表中出现的顺序。高优先级列在最后。
###动作工厂方法
自 TrackMate 版本 7(2021 年 8 月)开始,操作是唯一使用 getIcon() 方法的 TrackMate 模块。然后该图标将显示在操作列表中的操作名称旁边。这就是 TrackMateModule 部分。
具体到动作的方法就更有趣了:
@Override
public TrackMateAction create()
该方法没有任何参数。
重要字段(例如模型等)会在操作类本身交付给操作中,但不会在工厂中交付
package plugin.trackmate.examples.action;
import javax.swing.ImageIcon;
import org.scijava.plugin.Plugin;
import fiji.plugin.trackmate.TrackMatePlugIn;
import fiji.plugin.trackmate.action.TrackMateAction;
import fiji.plugin.trackmate.action.TrackMateActionFactory;
import ij.ImageJ;
import ij.ImagePlus;
@Plugin( type = TrackMateActionFactory.class )
public class LaunchEventLoggerActionFactory implements TrackMateActionFactory
{
private static final String INFO_TEXT = "<html>This action will launch a new event logger, that uses the ImageJ log window to append TrackMate events.</html>";
private static final String KEY = "LAUNCH_EVENT_LOGGER";
private static final String NAME = "Launch the event logger";
@Override
public String getInfoText()
{
return INFO_TEXT;
}
@Override
public ImageIcon getIcon()
{
return null; // No icon for this one.
}
@Override
public String getKey()
{
return KEY;
}
@Override
public String getName()
{
return NAME;
}
@Override
public TrackMateAction create()
{
return new LaunchEventLoggerAction();
}
}
没什么复杂的。
TrackMateAction界面
该接口仅由两个方法组成:
public void execute( TrackMate trackmate, SelectionModel selectionModel, DisplaySettings displaySettings, Frame parent );
public void setLogger(Logger logger);
execute方法是用户单击执行按钮时触发的方法。它接收:
TrackMate实例,包含当前模型和设置。- 当前在GUI中使用的选择模型。
- 当前视图中当前使用的
DisplaySettings。 Frame参考,如果您需要的话制作模式对话框。- 这可能有用。在我们的例子中,正如您在工厂类中的那样,我们通过控制器获取了模型并选择模型。
另一种用于传递特定于 GUI 操作面板的记录器实例的方法。发送到此记录器的所有消息和更新都将显示在操作面板上。
以下是在简单启动器中的简单转换方式:
package plugin.trackmate.examples.action;
import java.awt.Frame;
import fiji.plugin.trackmate.Logger;
import fiji.plugin.trackmate.SelectionModel;
import fiji.plugin.trackmate.TrackMate;
import fiji.plugin.trackmate.action.TrackMateAction;
import fiji.plugin.trackmate.gui.displaysettings.DisplaySettings;
import plugin.trackmate.examples.view.EventLoggerView;
public class LaunchEventLoggerAction implements TrackMateAction
{
private Logger logger;
@Override
public void execute( final TrackMate trackmate, final SelectionModel selectionModel, final DisplaySettings displaySettings, final Frame parent )
{
logger.log( "Launching a new event logger..." );
final EventLoggerView view = new EventLoggerView( trackmate.getModel(), selectionModel );
view.render();
logger.log( " Done.\n" );
}
@Override
public void setLogger( final Logger logger )
{
this.logger = logger;
}
}
总结
结果如下:

您可以想象有很多应用程序。由于它们使您可以访问接下来的大部分插件,您基本上可以在那里插入任何内容。一个限制是它并不完全适合现有的 GUI:操作仅显示为下拉列表中的项目。但在大多数情况下,这并不重要。操作对于将一个新功能快速移植到 TrackMate 上非常有用。
本教程到此结束,非常快速且简单。不幸的是,这是本系列中最后一次简单而简短的事情。下一个教程将是关于实现自定义检测器,由于明显错误的原因,这将变得相当复杂。到时见!