Hallo Community,
Wie man unschwer am Titel erkennen kann tu ich mich etwas schwer mit dem Umgang mit Bildern und Java.
Ich habe zum Abschluss meines Abiturs ein Projekt zu realisieren. Ich habe mich dafür entschieden mich in Java einzuarbeiten und es in Java umzusetzen. (Eigentlich arbeiten wir in der Schule (NOCH) mit Delphi). Jedenfalls arbeite ich an einem Programm, das helfen soll die Basis des Bruchrechnens zu erlernen. Es soll bestimmte häufige Fehler am Schüler ausfindig machen und dann Videos zum entsprechenden Fehler vorschlagen.
Zur Verschönerung des ganzen hatte ich vor die Brüche anhand von Bildern darzustellen wie man sie mit Hilfe von JDOM & JMathTex erstellen kann.
Bsp:
Das Problem liegt aber nun hier, dass ich zwar 1000 Möglichkeiten finde das Bild einzubinden, zB als Icon für ein Label oder direkt am anfang des Konstruktors mit super(); auf eine Klasse zugreifen die das erledigt.
Bei der Methode mit super(); liegt das Problem da, dass das Bild geladen wird bevor überhaupt die zufällig generierten Nenner / Teiler zur Verfügung stehen.
Bei der methode mit dem Label Icon kommt manchmal das hier:
sun.awt.image.PNGImageDecoder$PNGException: crc corruption
at sun.awt.image.PNGImageDecoder.getChunk(PNGImageDecoder.java:699)
at sun.awt.image.PNGImageDecoder.getData(PNGImageDecoder.java:707)
at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:234)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Ausserdem soll das Bild auch mit jeder initialisierung des Programms ändern (neuer Bruch generiert)...
Die Klasse die das Bild generiert:
Hier die Klasse die das Bild anzeigen soll und auf die im Konstruktor meines Hauptprogramms mit super zugegriffen werden soll:
dieser code soll direkt oben im Konstruktor stehen:
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken.
Gruss erxx
Wie man unschwer am Titel erkennen kann tu ich mich etwas schwer mit dem Umgang mit Bildern und Java.
Ich habe zum Abschluss meines Abiturs ein Projekt zu realisieren. Ich habe mich dafür entschieden mich in Java einzuarbeiten und es in Java umzusetzen. (Eigentlich arbeiten wir in der Schule (NOCH) mit Delphi). Jedenfalls arbeite ich an einem Programm, das helfen soll die Basis des Bruchrechnens zu erlernen. Es soll bestimmte häufige Fehler am Schüler ausfindig machen und dann Videos zum entsprechenden Fehler vorschlagen.
Zur Verschönerung des ganzen hatte ich vor die Brüche anhand von Bildern darzustellen wie man sie mit Hilfe von JDOM & JMathTex erstellen kann.
Bsp:

Das Problem liegt aber nun hier, dass ich zwar 1000 Möglichkeiten finde das Bild einzubinden, zB als Icon für ein Label oder direkt am anfang des Konstruktors mit super(); auf eine Klasse zugreifen die das erledigt.
Bei der Methode mit super(); liegt das Problem da, dass das Bild geladen wird bevor überhaupt die zufällig generierten Nenner / Teiler zur Verfügung stehen.
Bei der methode mit dem Label Icon kommt manchmal das hier:
sun.awt.image.PNGImageDecoder$PNGException: crc corruption
at sun.awt.image.PNGImageDecoder.getChunk(PNGImageDecoder.java:699)
at sun.awt.image.PNGImageDecoder.getData(PNGImageDecoder.java:707)
at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:234)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Ausserdem soll das Bild auch mit jeder initialisierung des Programms ändern (neuer Bruch generiert)...
Die Klasse die das Bild generiert:
Java:
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.JLabel;
import be.ugent.caagt.jmathtex.TeXConstants;
import be.ugent.caagt.jmathtex.TeXFormula;
public class mathRender {
public static void RenderIt(String Formula) {
TeXFormula formula = new TeXFormula(Formula);
Icon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 25);
BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight()+20, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
icon.paintIcon(new JLabel(), g2, 10, 10); // component can't be null
// fill a file path below
File file = new File("f:\\formule.png");
try {
ImageIO.write(image, "png", file.getAbsoluteFile());
} catch (IOException ex) {
//
}
}
public static void main(String[] args) {
String Formula;
Formula = "\\frac{10}{1}\\nbsp + \\nbsp \\frac{1}{10}\\nbsp";
RenderIt(Formula);
}
}
Hier die Klasse die das Bild anzeigen soll und auf die im Konstruktor meines Hauptprogramms mit super zugegriffen werden soll:
Java:
public class imgShow
extends Canvas {
private Image img;
int x,y;
public imgShow(String fname) {
img = getToolkit().getImage(fname);
MediaTracker mt = new MediaTracker(this);
mt.addImage(img, 0);
try {
//Warten bis das Bild geladen ist.
//damit getWidth und getHeight funktionieren
mt.waitForAll();
} catch (InterruptedException e) {
// nichts
}
repaint();
}
public void paint(Graphics g) {
if(img != null) {
g.drawImage(img,x,y,this);
}
}
public Dimension getPreferredSize() {
return new Dimension(
img.getWidth(this),
img.getHeight(this)
);
}
public Dimension getMinimumSize() {
return new Dimension(
img.getWidth(this),
img.getHeight(this)
);
}
public static void main(String[] args) {
}
}
dieser code soll direkt oben im Konstruktor stehen:
Java:
super("imgShow");
setBackground(Color.lightGray);
setVisible(true);
//Hinzufügen der Komponente
setLayout(new GridLayout(1,1));
add(new imgShow("formule.png"));
pack();
//Window Listener
addWindowListener(new WindowClosingAdapter(true));
Gruss erxx
Zuletzt bearbeitet: