Diskuze: používání JEuclid

Volná diskuze používání JEuclid

Aktivity (1)
Avatar
Silvinios
Redaktor
Avatar
Odpovídá na [email protected]
Silvinios:4.2.2014 18:37

Stačí použít JMathComponent.

Příklad:

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import net.sourceforge.jeuclid.swing.JMathComponent;

public class Demo {

    public static void main(String[] args) {
        final JMathComponent component = new JMathComponent();
        component.setFontSize(40);

        JFrame frame = new JFrame("JEuclid Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(component);
        frame.setMinimumSize(new Dimension(500, 400));
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                String content = "<?xml version=\"1.0\"?>\r\n" +
                        "<!DOCTYPE math PUBLIC \"-//W3C//DTD MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/mathml2.dtd\">\r\n" +
                        "<math mode=\"display\">\r\n" +
                        "  <mrow>\r\n" +
                        "    <munderover>\r\n" +
                        "      <mo>&#x222B;</mo>\r\n" +
                        "      <mn>1</mn>\r\n" +
                        "      <mi>x</mi>\r\n" +
                        "    </munderover>\r\n" +
                        "    <mfrac>\r\n" +
                        "      <mi>dt</mi>\r\n" +
                        "      <mi>t</mi>\r\n" +
                        "    </mfrac>\r\n" +
                        "  </mrow>\r\n" +
                        "</math>";
                component.setContent(content);
            }
        });
    }

}
 
Nahoru Odpovědět 4.2.2014 18:37
Avatar
Odpovídá na Silvinios
[email protected]:5.2.2014 8:25

děkuju za rychlou pomoc, ale při spuštění mi hodí tuto chybu

run:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at net.sourceforge.jeuclid.swing.JMathComponent.<clinit>(JMathComponent.java:75)
        at pokus.Pokus.main(Pokus.java:19)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 2 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

jeuclid-core.3.1.9.jar mám mezi knihovnami pro kompilaci v projektu v NetBeans. udělal jsem někde chybu?

 
Nahoru Odpovědět 5.2.2014 8:25
Avatar
Silvinios
Redaktor
Avatar
Odpovídá na [email protected]
Silvinios:10.2.2014 22:12

Zkušenosti s JEuclid nemám žádné a přiznám se, že MathML jsem vůbec neznal, takže jsem to musel vyzkoušet :)

Souhlasím, že rychlost není nic moc, ale s jinými knihovnami zkušenosti nemám.

Je pravda, že APIdocs často nestačí. Pak už zbývá jen metoda pokus-omyl a prohlížení zdrojáků, případně Google, ale o tom jsi už psal, že se ti nepodařilo nic rozumného najít...

 
Nahoru Odpovědět 10.2.2014 22:12
Avatar
[email protected]:11.2.2014 8:26

no po hraní si s MathML a LatexMath, sbírání kódu a informací po netu jsem si upravil cizí kód:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;

import net.sourceforge.jeuclid.swing.JMathComponent;


public class MathML extends JFrame implements ActionListener {
    private JTextArea latexSource;
        private JButton btnRender;
        private JPanel drawingArea;
        private JSpinner spinner;

        public MathML() {
                this.setTitle("MathML Example");
                this.setSize(500, 500);
                Container content = this.getContentPane();
                content.setLayout(new GridLayout(2, 1));
                this.latexSource = new JTextArea();
                setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
                JPanel editorArea = new JPanel();
                editorArea.setLayout(new BorderLayout());
                editorArea.add(new JScrollPane(this.latexSource),BorderLayout.CENTER);
                editorArea.add(btnRender = new JButton("Render"),BorderLayout.SOUTH);
                editorArea.add(spinner = new JSpinner(),BorderLayout.NORTH);
                spinner.setValue(18);

                content.add(editorArea);
                content.add(this.drawingArea = new JPanel());
                this.btnRender.addActionListener(this);

                String retezec = "<?xml version=\"1.0\"?>\r\n" +
                         "<!DOCTYPE math PUBLIC \"-//W3C//DTD MathML 2.0//EN\" \"http://www.w3.org/TR/MathML2/dtd/mathml2.dtd\">\r\n" +
                         "<math mode=\"display\">\r\n" +
                         "  <mrow>\r\n" +
                         "    <munderover>\r\n" +
                         "      <mo>&#x222B;</mo>\r\n" +
                         "      <mn>1</mn>\r\n" +
                         "      <mi>x</mi>\r\n" +
                         "    </munderover>\r\n" +
                         "    <mfrac>\r\n" +
                         "      <mi>dt</mi>\r\n" +
                         "      <mi>t</mi>\r\n" +
                         "    </mfrac>\r\n" +
                         "  </mrow>\r\n" +
                         "</math>";

                this.latexSource.setText(retezec);
        }

        public void render() {

                        // get the text
                        String latex = this.latexSource.getText();

                        // create a formula
                        JMathComponent formula = new JMathComponent();
                        formula.setFontSize((int)this.spinner.getValue());
                        this.drawingArea.removeAll();
                        this.drawingArea.add(formula);
                        formula.setContent(latex);




        }

        public static void main(String[] args) {
                MathML frame = new MathML();
                frame.setVisible(true);
        }

    @Override
        public void actionPerformed(ActionEvent e) {
                if( e.getSource()==this.btnRender ) {
                        render();
                }

        }

}

první render je celkem pomalý (až 5sec),ale další je již rychlý. Oproti LatexMath (zatim jsem moc nezkoumal vykreslování) je výhoda vykreslení s JEculid ta, že po "resize" rámečku nezmizi renderovaný obsah. Ale jak říkám, JLatexMath jsem nezkoumal blíže.

src:

http://forge.scilab.org/index.php/p/jlatexmath/
 
Nahoru Odpovědět 11.2.2014 8:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.