Zum Inhalt springen

Problem mit InsertImage in JTextPane


Empfohlene Beiträge

Geschrieben

Hallo..

und zwar habe ich mir einen JFileChooser angelegt der eine ausgewählte Datei an einen anderen Ort kopiert und diese (Eine Grafik) im JTextPane anzeigen lässt...

Problem:

Ich wähle eine Datei aus, er kopiert diese an den bestimmten Ort, und fügt diese dann in das JTextPane ein.

Nun wähle ich eine weitere Datei aus, er kopiert diese an den bestimmten Ort und fügt danach die 1. Datei wieder in das JTextPane ein... und nicht die als zweites ausgewählte ?!?!

so als wäre sie irgendwo zwischengespeichert... ich finde aber nirgends wo dies der Fall sein könnte...

Hier mal der Code..


private JFrame getJFrame1() throws IOException {

		jFileChooser1 = new JFileChooser();

		int status = jFileChooser1.showOpenDialog(null);


	    if (status == JFileChooser.APPROVE_OPTION) {

	      File selectedFile = jFileChooser1.getSelectedFile();

	      imageImport(selectedFile.getPath());


	    } else if (status == JFileChooser.CANCEL_OPTION) {

	      System.out.println("canceled");

	    }


	    insertImageIntoText();

		return jFrame1;


	}

	private void imageImport(String gifFile) throws IOException{

		File fromFile = new File(gifFile);

	    File toFile = new File(image_path+System.getProperty("user.name")+".gif");

	    FileInputStream inFile = new FileInputStream(fromFile);

	    FileOutputStream outFile = new FileOutputStream(toFile);

	    FileChannel inChannel = inFile.getChannel();

	    FileChannel outChannel = outFile.getChannel();

	    int bytesWritten = 0;

	    long byteCount = inChannel.size();

	    while (bytesWritten < byteCount) {

	      bytesWritten += inChannel.transferTo(bytesWritten, byteCount - bytesWritten, outChannel);

	    }

	    inFile.close();

	    outFile.close();

	}

	private void insertImageIntoText() throws IOException{



		image = new ImageIcon(image_path+System.getProperty("user.name")+".gif");



		jTextPane1.insertIcon(image);

	}

Schauts euch bitte mal an und ich hoffe ihr könnt mir dann helfen =/

Gruß

Geschrieben

Okay ich habe rausgefunden, dass das gar nicht an dem code ansich liegt...

Ich hab jetzt mal was ganz einfaches gebaut:

einen Button der beim klick das macht:

jTextPane1.insertIcon(new ImageIcon(image_path+System.getProperty("user.name")+".gif"));

ich klicke ein paar mal drauf, dann geh ich in das verzeichnis, lösche die datei, nehem eine andere Grafik nenne sie genauso wie die eben und drücke wieder paar mal drauf, jedoch fügt er immer noch die alte grafik ein...

WIESO ist das so?

Und wie kann ich das UMGEHEN?

Hoffe einer hat ne Idee...

gruß

Geschrieben

Da ich keine besonders große Lust habe durch deinen Code durchzusteigen:

Erstell dochmal einen einfachen Testcase, der das von dir beschriebene Verhalten (und nicht mehr!) zeigt. Vielleicht fällt dir in dem Verlauf schon die Lösung ein, wenn nicht ist es für jemand anders bedeutend einfacher nachzuvollziehen worum es eigentlich geht.

Geschrieben

wie gesagt, habe ich ja jetzt schon gemacht.. habe das ganze drum herum weggelasse und nur einen button erstellt der ein image einfügt..

Jedoch wenn ich es zur Laufzeit des Programms ändere dann fügt er trotzdem immer noch das bereits eingefügte ein und nicht das neue überschriebene Icon... =/

Gibts es nicht so etwas wie z.b. ein refresh des icons bevor das programm es einfügt?

Gruß

Geschrieben

Ahso okay:

Bedingungen: Eine Grafik c:\x.gif existiert

1. Ausführen des Programms -> Man sieht ein Fenster mit einem JButton und einem JTextPane

2. Klick auf den Button -> Es wird das Icon c:\x.gif in JTextPane eingefügt

3. Ich ersetze in c:\ das Icon x.gif mit einem anderen x.gif

4. Klick auf den Button -> Es wird das Icon eingefügt das vorher schon eingefügt wurde -> Erwartet wurde, dass nun ein anderes Icon einfügt wird, da es ja geändert wurde

5. Neustart des Programms

6. Klick auf den Button -> Nun wird das gewünschte Icon eingefügt

Wie gesagt:

Warum? und Wie kann man das umgehen?

Gruß

Geschrieben

Du hast noch immer nicht verstanden was ein Testcase ist. Ich will in meiner Umgebung nur auf einen Knopf drücken und das Programm läuft. Hierzu gibt es zwei Möglichkeiten: Du erstellst eine Klasse mit einer main-Methode, die genau das macht, was du hier beschreibst oder aber du erstellst einen JUnit Testcase. Ohne das gibt es - zumindest von mir - auch keine Lösung.

Eigentlich ist es doch ganz einfach: Du willst, dass ich (oder irgendjemand sonst hier aus dem Forum) dir helfe. Ich habe aber keine Lust mich stundenlang mit einem Setup zu befassen, bis ich dein Problem reproduziert bekomme - denn ohne reproduzierbares Problem keine Problemlösung.

Solange du also nicht bereit bist genau diesen Initialaufwand zu leisten behaupt ich, dass du noch eine ganze Weile auf die Lösung warten wirst.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...