Input/Output Hashmap in einem JPanel via JList anzeigen

Andy17

Aktives Mitglied
Moin Leute, dies ist mein erster Post, daher bitte nicht sparen mit Krititk 😉

Mein Problem ist folgendes:
Ich möchte den Zwischenspeicherinhalt von Windows in eine Hashmap schreiben, welche ich dann in einem JPanel anzeigen möchte. Zum anzeigen bin ich auf die Idee gekommen, mir eine JList zu erstellen und dann die Hashmap dort hineinzupacken. Dazu musste ich einige Male .toString benutzen, was ich nicht genau verstehe. Fehlermeldung bekomme ich beim debuggen des Programmes keine, die Strings bleiben einfach leer. Kann mir jemand sagen,
a) warum meine Strings leer bleiben?
b) was genau .toString() macht?

Gegoogelt und die Java-Forum-Suche habe ich schon benutzt, leider ohne Erfolg. Hoffe ihr könnt mir helfen 🙂

Java:
	private static void AddHashmapToList(){
		Clipboard systemClipboard;
		systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable transferData = systemClipboard.getContents(null);
		String s = new String();
		transferData.toString();
		hashmap.put(hashmap.size(), s);
		String t = new String();
		hashmap.toString();
		linklist.add(s);
		}

Aufgerufen wird meine Methode bei einem Buttondruck, welche das StartPanel mit dem nächsten Panel tauscht.
Hoffe die Informationsmenge genügt, wenn nicht, poste gerne weitere Komponenten meines Programmes, wenn das der Lösung hilfreich ist.
 
Mir ist gerade beim durchlesen aufgefallen, dass ich
Java:
linklist.add(s)
geschrieben habe, aber auch mit
Java:
linklist.add(t)
kommt immer noch nichts.
 
Java:
String s = new String();
transferData.toString();
hashmap.put(hashmap.size(), s);
Der Code macht so keinen Sinn.

Statt
Code:
String s = new String();
schreibt man eher
Code:
String s = "";
. Die zweite Anweisung hat keinerlei Auswirkungen, den Rückgabewert der Methode speicherst du dir nirgends ab. Beim Hinzufügen des Strings in die HashMap ist der String natürlich noch leer, du hast ihm ja auch keinen anderen Wert zugewiesen.
Warum benutzt du hier ne Map, tuts nicht auch ne einfache Liste?

Hier mal dein Code etwas korrigiert:
Java:
String s = transferData.toString();
hashmap.put(hashmap.size(), s);

EDIT:
Warum verwendest du eigentlich ne Liste UND ne Map?
 
Hey, danke erstmal für die schnelle Antwort und die Verbesserungsvorschläge, darauf dass ich die Strings nirgends fülle bin ich garnicht gekommen 🙂oops🙂...
Die Hashmap benutze ich deshalb weil ich später die Strings die ich in die Liste einfüge wieder auslesen will und mir von einem Kollegen empfohlen wurde, dann eine Hashmap zu benutzen.
Die Liste und die Hashmap beutze ich, weil ich die Hashmap nicht einfach dem Panel hinzufügen kann. Okay, soweit nochmals danke, ich probier das mal eben mit deinen Vorschlägen aus.
 
Ich würde die HashMap erstmal komplett weglassen, die verkommt bei dir zu ner einfachen Liste.
Aus deiner Liste kannst du auch per
Code:
get(index)
den String wieder rauslesen.
 
Gut, soweit habe ich das ausprobiert, allerdings wird die Tabelle in meinem JPanel noch immer leer angezeigt, obwohl die Strings mittlerweile gefüllt sind. Zur Kontrolle habe ich mir die mal ausgeben (system.out) lassen:

sun.awt.datatransfer.ClipboardTransferable@b57e9a
{0=sun.awt.datatransfer.ClipboardTransferable@b57e9a}

Der Code den ich jetzt verwende ist der:
Java:
private static void AddHashmapToList(){
		Clipboard systemClipboard;
		systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable transferData = systemClipboard.getContents(null);
		String s = "";
		s = transferData.toString();
		hashmap.put(hashmap.size(), s);
		String t = "";
		t = hashmap.toString();
		linklist.add(t);
		System.out.println(s);
		System.out.println(t);

was mich jedoch auch wundert, ich habe weiter oben in meinem Programm schon einmal den Zwischenspeicher abgefragt und in eine Datei eingeschrieben und dann ausgegeben. Da hat er den Zwischenspeicher so angegeben, wie ich ihn erwartet hätte. Warum tut der das hier bei System.ou nicht?

Java:
AddHashmapToList();
		Clipboard systemClipboard;
		systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable transferData = systemClipboard.getContents(null);
		for (DataFlavor dataFlavor : transferData.getTransferDataFlavors()) {
			Object content = null;
			try {
				content = transferData.getTransferData(dataFlavor);
			} catch (UnsupportedFlavorException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			if (content instanceof String) {
				try {
					FileOutputStream fout = new FileOutputStream(
							"C:/Users/Public/Downloads/Zwischenspeicher1.txt");
					PrintWriter w = new PrintWriter(fout);
					((PrintWriter) w).println(content);
					w.println();
					w.flush();
					w.close();
					FileReader fr = new FileReader(
							"C:/Users/Public/Downloads/Zwischenspeicher1.txt");
					BufferedReader br = new BufferedReader(fr);
					String s;
					while ((s = br.readLine()) != null) {
						System.out.println(s);
					}
					fr.close();
					System.out.println("Your file has been written.");
				} catch (FileNotFoundException e1) {
					e1.printStackTrace();
					break;
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}

		}
Der Output sieht dann zusammengenommen so aus:


sun.awt.datatransfer.ClipboardTransferable@b57e9a
{0=sun.awt.datatransfer.ClipboardTransferable@b57e9a}
<html>
<body>
<!--StartFragment-->
<a href="http://www.java-forum.org/java-basics-anfaenger-themen/140049-hashmap-jpanel-via-jlist-anzeigen.html#post928379">http://www.java-forum.org/java-basics-anfaenger-themen/140049-hashmap-jpanel-via-jlist-anzeigen.html#post928379</a>
<!--EndFragment-->
</body>
</html>

Your file has been written.
http://www.java-forum.org/java-basi...map-jpanel-via-jlist-anzeigen.html#post928379

Your file has been written.
http://www.java-forum.org/java-basi...map-jpanel-via-jlist-anzeigen.html#post928379

Your file has been written.
ImportantStuff
 
Btw, danke für den Tipp mit get(Index) dann werde ich die Hasmap weglassen. Auf ein neues.
(Sorry, dass ich deinen Post zuspät gelesen habe und vorher schon meinen Kram gepostet habe)
 
Es kommt immer noch so eine Sch**** Ausgabe in Form von
sun.awt.datatransfer.ClipboardTransferable@1896c52
Und mein Panel ist immernoch leer.
 
Es kommt immer noch so eine Sch**** Ausgabe in Form von
sun.awt.datatransfer.ClipboardTransferable@1896c52
Und mein Panel ist immernoch leer.

Die kommt von [c].toString()[/c]. Wenn du die Daten anders darstellen willst, musst du das schon selbst machen. Es mach wenig Sinn, Strings erst mit "" zu initialisieren und dann in der nächsten Zeile gleich zu überschreiben.
 

Zurück
Oben