从 BeanShell 脚本命名 jEdit 的主 JTextArea

问题描述 投票:0回答:1

我的目标如下:Isabelle/jEdit是jEdit对Isabelle定理证明者的扩展。我想使用 shell 命令以编程方式将理论文件的排版、语法突出显示版本转换为图像文件,就像它们出现在屏幕上一样。

这是

调用 jEdit 以获取渲染文本的位图的后续内容,其中作者编写了 BeanShell 脚本以将 JTextArea 转换为图像文件。这是脚本:

import java.awt.image.BufferedImage; import javax.imageio.ImageIO; img = new BufferedImage(textArea.getWidth(), textArea.getHeight(), BufferedImage.TYPE_INT_ARGB); g = img.getGraphics(); textArea.paint(g); g.dispose(); ImageIO.write(img, "png", new File(".../textArea.png"));
我从命令行调用了它

$ isabelle jedit -j "-run=textarea-snapshot.bsh" MyTheory.thy
但是 BeanShell 脚本的 

textArea

 未定义,所以我收到了错误。

所以我应该得到

JTextArea

 的主要 
jEdit
 来完成这项工作。

据我了解,它是在

创建的

https://github.com/albfan/jEdit/blob/master/org/gjt/sp/jedit/gui/RegisterViewer.java#L78

contentTextArea = new JTextArea(10,20);
但不清楚我是否可以从 BeanShell 脚本访问它而不修改 jEdit 的代码。

有 jEdit 经验的人可以回答我如何从 BeanShell 脚本中命名这个 contentTextArea 吗?或者说,我怎样才能实现我最初的目标?

java swing beanshell jedit
1个回答
0
投票
我在该链接问题中给您的 BeanShell 脚本是获取已运行且现有的 jEdit 实例的图像。

textArea

正是访问文本区域的方法。

如果您在 jEdit 全新启动期间运行该脚本,它会执行得太早并且文本区域还不存在。

如果你想这样做,你需要编写一个更复杂的脚本,它注册一个

EditBus

 组件,从而可以对诸如视图被激活之类的事件做出反应。

类似的事情

import java.awt.image.BufferedImage; import javax.imageio.ImageIO; EditBus.addToBus(new EBComponent() { public void handleMessage(EBMessage message) { if ((message instanceof ViewUpdate) && (message.getWhat() == ViewUpdate.ACTIVATED)) { EditBus.removeFromBus(this); textArea = message.getView().getTextArea(); img = new BufferedImage(textArea.getWidth(), textArea.getHeight(), BufferedImage.TYPE_INT_ARGB); g = img.getGraphics(); textArea.paint(g); g.dispose(); ImageIO.write(img, "png", new File("textArea.png")); } } });
    
© www.soinside.com 2019 - 2024. All rights reserved.