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.

Geschrieben

Versuch doch mal das Objekt, dass das Bild enthält (in deinem Falle der Button) erst zu entfernen und dann mit dem neuen Bild neu anzulegen.

Wäre keine Lösung aber nen Workaround :)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...