有没有办法在输入过程中在JavaFX中格式化数学表达式?类似TextArea的东西,其行为与mathquill编辑器完全相同,适用于Web应用程序?
如果没有,是否可以创建自定义TextField
/ TextArea
来提供此类功能?我还没有调查过,所以欢迎任何指导或建议:)
我想出的唯一解决方法是将表达式输入为String并使用jLaTeXmath将其转换为图像,这不是首选,因为最终结果应该是可编辑的等式。
嵌入jLaTeXmath的简短示例:
这是通过将TeX表达式转换为可放置在窗格上的BufferedImage
来完成的。请参阅下面的转换代码:
/**
* Converts LaTeX code to a BufferedImage
* @param latex
*/
public static BufferedImage latexToImage(String latex){
String start ="\\begin{array}{l}";
start += latex;
start += "\\end{array}";
TeXFormula formula = new TeXFormula(start);
// Note: Old interface for creating icons:
//TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 20);
// Note: New interface using builder pattern (inner class):
TeXIcon icon = formula.new TeXIconBuilder().setStyle(TeXConstants.STYLE_DISPLAY).setSize(65f).build();
icon.setInsets(new Insets(1, 1, 1, 1));
BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
g2.setComposite(AlphaComposite.Clear);
// g2.setColor(Color.WHITE);
g2.fillRect(0,0,icon.getIconWidth(),icon.getIconHeight());
JLabel jl = new JLabel();
jl.setForeground(new Color(0, 0, 0));
g2.setComposite(AlphaComposite.Src);
icon.paintIcon(null, g2, 0, 0);
/*
File file = new File("Example2.png");
try {
ImageIO.write(image, "png", file.getAbsoluteFile());
} catch (IOException ex) {}
*/
return image;
}
然后可以在JavaFX中的ImageView中转换和设置图像,如下所示:
BufferedImage bimage = latexToImage("a = 2 \cdot x");
Image image = SwingFXUtils.toFXImage(bimage , null);
// have an ImageView in your scene and set the image
imgView.setImage(image );
答案 0 :(得分:0)
JavaFX的下一个版本将通过使用HTMLEditor控件来支持MathML:
点击此链接Java Early Access Download可以尽早访问这些版本。
恐怕您正在寻找的东西还不存在。
JavaFX GitHub Reprository中有一个项目,但这是一个长期项目。
关于MathQuill,看来它是JavaScript代码。或HTMLEditor使用WebKit的实现并可以执行JavaScript代码。这可能是一个短期解决方案。