输入时的JavaFX格式数学

时间:2018-04-22 20:59:58

标签: math javafx latex javafx-8

有没有办法在输入过程中在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 );

1 个答案:

答案 0 :(得分:0)

JavaFX的下一个版本将通过使用HTMLEditor控件来支持MathML:

  • Java 8 Update 192中包含的JavaFX 8 Update 192
  • JavaFX 11。

点击此链接Java Early Access Download可以尽早访问这些版本。

恐怕您正在寻找的东西还不存在。

JavaFX GitHub Reprository中有一个项目,但这是一个长期项目。

关于MathQuill,看来它是JavaScript代码。或HTMLEditor使用WebKit的实现并可以执行JavaScript代码。这可能是一个短期解决方案。