Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
13.01.2005, 11:23
McE-Madden



Hallo

ich hoffe mir kann hier einer Helfen!

Ich möchte via Java einen Windows-befehl ansprechen.. Copy (strg+c) und Paste (strg+v)

das wäre die einfachste lösung ohne selbst das Clipboard mit JTable inhalten voll zu packen. Ich weiß auch ned so wirklich wie des geht. :(

deshalb, wie kann ich die windows befehle ansprechen.. sodass ich nur noch den button [kopieren] erzeugen muss und der das [strg]+[c] ausführt.

ich freue mich auf antworten.
mfg
mce

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
001
13.01.2005, 13:12
Kriz



Geht nicht. Java hat seine eigene Clipboard-Architektur, wie du bereits bemerkt hast. Wenn du komplexere Dinge als Text kopieren willst (das übernimmt freundlicherweise die darunterliegende Plattform, also Windows z.B.), musst du den Weg über Java gehen.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
002
13.01.2005, 13:59
McE-Madden



Meinst du kannst mir mal ein bisschen hilfestellung geben in sachen zwischenspeicher in java. und vieleicht hast ja eine idee wie ich eine tabellenform da rein bekomme.. und im word oder excel weider raus bekomme..

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
003
13.01.2005, 21:21
Kriz



Hm, wird schwierig. Als Ansatzpunkt habe ich mal folgendes gemacht: Aus einer Exceltabelle alle benutzten Zellen markiert und kopiert, dann mal einfach in Notepad eingefügt. Er hat nur den reinen Text kopiert und dann mehr oder weniger so wieder versucht als Text einzufügen. Das Problem ist die Formatierung, wenn du beispielsweise aus einer JTable die Zellen markierst und kopierst! Zwischen zwei Spalten muß als Trennzeichen ein Tabulator genommen werden und zwischen zwei Zeilen ein normales Carriage Return (+ Linefeed ?). So scheint sowas locker flockig über das Clipboard transportabel zu sein.

Mehr kann ich dazu leider nicht sagen als: Ausprobieren...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
004
14.01.2005, 13:33
McE-Madden



was ist echt ein schöne idee zur lösung der formatierung..
um das aber auszuprobieren fehlt mir noch: wie bekomme ich das zeuch da rein. Ich raff den zusammen hang der Objekte nicht.
hast da jemand ein einfaches beispiel?

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
005
18.01.2005, 09:43
McE-Madden



also meinen nachforschungen zu folge weiß ich jetzt wie ich sachen in die Zwischenablage kopiere...

das ding ist.. die zwischenablage benutzt mehrere formate die je nach zweck unterschiedlich sind.. für einen stinknormalen Text ist also das Format 1 gesetzte.. wenn du jetzt allerding das passend wie eine tabelle für Excel behandeln willst, dann kommt noch das format 46043 oder so dazu.. (die zahl stimmt nicht)

meine frage jetzt:
Wie kann ich in java einer Sache in der Zwischenablage die Formate zuweisen? mehr brauch ich dazu nicht..
also einen bestimmt formatierten Text und die Formate.. nur wie gesagt, ich finde nix über die format festlegung..

ich hoffe mir kann da jemand helfen.
mfg

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
006
18.01.2005, 19:20
HammerBlade



Hast du dir mal die >Java-API-Docs in Sachen Clipboard< angesehen? Da steht alles drin was du wissen musst.

Und zu der Sache mit den Formaten des Clipborads. Java ist platform unabhängig, d.h. Java unterstützt keine spezielle Mirco$oft-Format, sondern nur allgemeine OS-unabhängige Formate (heißen unter Java Flavor), aber das seht auch alles in den Docs.

Du wirst wahrscheinlich deine Daten die du c&p'en willst von Hand passen formatieren müssen.

Mal was anderes... Willst du zwischen Windows und Java c&p'en oder nur von Java nach Java? Denn da musst du sicherlich auch noch einiges beachten.

Wenn du aber nur innerhalb deiner JTable c&p'en willst, würde ich das nicht mit dem Clipboard machen. Dafür würde ich mit eine Art Fake-Clipboard machen, dass nur dein spezielles JTabel-Cell-Data-Format kann, und das Handling für Ctrl+C und Ctrl+V in Java overriden. Dann brauchts du dich nicht mit den Formaten des Clipboards herumschlagen.

Edit 1:

Zitat:
McE-Madden postete
also einen bestimmt formatierten Text und die Formate..
Die Formate des Clipboards haben nichts z.B. mit der Formatierung eines Textes oder so zu tun (nur um mit dieser Vorstellung über die Formate aufzuräumen, die du zu haben scheinst), sondern mit der Bedeutung des Inhalts. Windows kenn folgende Clipboard-Formate:

Quellcode:ID              Description
-------------------------------------------------------------------------------------------------------
CF_TEXT         Null-terminated, plain ANSI text in a global memory block.
CF_BITMAP       A bitmap compatible with Windows 2.x.
CF_METAFILEPICT A Windows metafile with some additional information about how the metafile should be displayed.  
CF_SYLK         An ASCII text format used by some older Microsoft products.
CF_DIF          Software Art's data interchange format (DIF). Also an ASCII text format.
CF_TIFF         Tag image file format (TIFF) data in a global memory block.
CF_OEMTEXT      Similar to CF_TEXT but using the OEM character set.
CF_DIB          A global memory block containing a Windows device-independent bitmap (DIB)
                as a BITMAPINFO structure followed by the bitmap bits.
CF_PALETTE      A color-palette handle. (Used in conjunction with CF_DIB.)
CF_PENDATA      Data is for the pen extensions to Windows.
CF_RIFF         Resource interchange file format (RIFF) data as a global memory block.
CF_WAVE         A specific case of RIFF in which the contained data is a waveform (sampled sound).
Wenn das Clipboard gerade das Format CF_TEXT hat, heisst das, dass man den Inhalt sinnvoll als Text interpretieren kann. Wenn es aber CF_BITMAP als Format hat kann man den Inhalt immer noch als Text interpretieren, es kommt halt nicht Sinnvolles dabei heraus.

Wenn man z.B. in Notepad Text kopiert (ins Clipboard einfügt) und dann in Word einfügt, weiss Word aufgrund des Formats des Clipboards (das vorher von Notepad auf CF_TEXT gesetzt wurde), dass es die Bytes im Clipboard als Text interpretieren sollte. Wenn man nun aber aus Paint ein Bitmap kopiert und es in Word einfügt, weiss Word hier auch wieder aufgrund des Formats (CF_BITMAP) das es die Bytes im Clipboard als Bitmap interpretiren sollte.

Wenn man nun versucht ein Bitmap aus Paint nach Notepad zu c&p'en passiert nichts, den Notepad weiss aufgrund des Formats (CF_BITMAP), dass es mit den Bytes im Clipborad nichts anfangen kann.

Soweit ich das den Java-API-Docs entnehmen kann gibt es unter Java folgende abstakte Formate, welche über MIME-Types verwaltet werden:

Quellcode:Abstract Name        Description
-------------------------------------------------------------------------------------------------------
JavaFileListType     list of file objects.
RemoteObjectType     remote object.
SerializedObjectType serialized object.
TextType             text flavor for this implementation of the Java platform
Ich schlage dir vor erstmal ausführlich die Docs zu lesen, soll heissen verschaf dir Grundlagenwissen zum Thema Clipboard. Dann wird das auch was.

Edit 2:
Einen kurzen Hinweis für deine spezielles Problem.

Wie Kriz schon richtig angemerkt hat kann man den Inhalt einer Excel-Tabelle in Notepad c&p'en, d.h. Excel nutzt als Clipboard-Format CF_TEXT. Das ist vorteilhaft für dich, denn du brauchst dir keine Sorge um komplexe Formatumwandlungen machen, sondern benutzt unter Java einfach TextType.

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 18.01.2005 um 20:07 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
19.01.2005, 09:24
McE-Madden



ich habe mir ein programm geschrieben , dass mir den inhalt eines clipboards textformatierung anzeigt und dessen formate.. wenn ich wie du sagst aus meiner java application die tabelle kopiere kommt

1 2 3
6 4
4 9

usw..

zusätzlich sind ein paar formate gesetzt die nicht gesetzt sind wenn ich nur eine textzeile kopiere..
ich habe das also so verstanden dass word eine formatangabe benötigt, damit es weiß, dass es daraus eine excel-ähnliche tabelle macht.. und nicht des als rawtext wie oben zu sehen reinkopiert..

aber okay wenn java sagt es hat nur die 4 dinger da, versteh ich immernoch ned, wo ich da jetzt dieses CF_TEXT angeb, weil des

Quellcode:JavaFileListType     list of file objects.
RemoteObjectType     remote object.
SerializedObjectType serialized object.
TextType             text flavor for this implementation of the Java platform
stinkt...

--

EJOT Productions
Game & Web Development


Dieser Beitrag wurde am 19.01.2005 um 09:24 von McE-Madden bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
19.01.2005, 10:58
HammerBlade



Nein, das stinkt nicht, sondern macht es einfacher. Ich hab mal eben eine bissl Code zusammengeschrieben, der Daten (einfachen Text, keine komplizierten Sachen) aus dem Clipboard lesen und schreiben kann. Da nach deiner Aussage JTable's ihnren Inhalt (fast) genausso strukturieren wie Exceltabellen ist das Austauschen von Daten zwischen den Beiden eine Kleinigkeit.

Textstruktur: Excel
Quellcode:1\t2\t3\r\n
4\t5\t6\r\n
7\t8\t9\r\n
... oder abstrakter:

Quellcode:1<tab>2<tab>3<newline>
4<tab>5<tab>6<newline>
7<tab>8<tab>9<newline>
Wobei <newline> aus Carriage Return + Linefeed = \r\n besteht.

Bespielcode:
Hinweis: Der Code ist nicht vollständig, es fehlet das gesamte Exception-Handling: z.B. wenn das Clipboard nicht verfügbar ist usw.

Quellcode:import java.awt.*;
import java.awt.datatransfer.*;

class PrintAndWriteClipboard
{
    public static void main(String[] args) throws Exception
    {
        writeClipboradContentAsString("1\t2\t3\r\n4\t5\t6\r\n7\t8\t9\r\n");
        
        printClipboradContentAsString();
    }
    
    public static void printClipboradContentAsString() throws Exception
    {
        Clipboard    systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable transferData    = systemClipboard.getContents(null);
        
        if(transferData.isDataFlavorSupported(DataFlavor.stringFlavor))
        {
            String content = (String)transferData.getTransferData(DataFlavor.stringFlavor);
        
            System.out.println(content);
        }
        else
            System.out.println("Error: Clipboard contains no usefull data.");
    }
    
    public static void writeClipboradContentAsString(String content) throws Exception
    {
        Clipboard       systemClipboard  = Toolkit.getDefaultToolkit().getSystemClipboard();
        StringSelection stringSelecetion = new StringSelection(content);
        
        systemClipboard.setContents(stringSelecetion, stringSelecetion);
    }
}
Mit diesem Code kann ich Daten so ins Clipborad einfügen, dass man sie in Excel richtig einfügen kannund ich kann Daten richtig lesen die Excel ins Clipboard geschrieben hat. In Word klappt das noch nicht, da scheint irgendwas zu fehlen, was Word anzeigt, dass es die Daten als Tabelle interpretieren soll.

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 19.01.2005 um 11:48 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
21.01.2005, 09:13
McE-Madden



hui okay danke!

wegen word genau das iss ja mein problem.. ich kenn des mit den windowsformaten und da gibts 2 die word dann auch richtig interpretiert.. aber mit java iss das nich so möglich. ich versuch jetzt schon 2 wochen dem problem auf den grund zu gehen aber ich kriege nichts praktisches zamm.

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
010
21.01.2005, 15:52
HammerBlade



Ich hab mir mal angesehen, welche Formate für's Clipborad gesetzt sind, wenn man zwischen Word und Excel Tabellen oder auch nur einfachen Text c&p't: Ausser den Standardformaten für Text (CF_TEXT, CF_OEMTEXT, CF_UNICODETEXT) werden durch Word und Excel auch noch ca. 10 verschiedene Customformate gesetzt. Diese haben ID's die umgefähr zwischen 49100 und 49300 liegen. Unter Windows kann man sich mit UINT RegisterClipboardFormat(LPCTSTR lpszFormat) eigene Clipboardformate definieren. Genau das machen Word und Excel. Mit Java hast du keine Chance an diese Customformate heranzukommen oder welche zu definieren. Java benutzt intern ein ähnliches System, nämlich MIME-Types, für Customformate bzw. um die Formatgruppen (Text, Image, Filehandle, ...) weiter zu unterteilen, z.B. text/plain oder text/html. Aber Windows Customformate gehen nicht in die Java MIME-Types ein und Java MIME-Types nicht in die Windows Customformate.

Fazit:
Imo ist es auf einfachem Weg nicht möglich Tabelleninhalt zwischen Java und Word zu c&p'en. Zwischen Java und Excel ist es kein Problem, weil Excel den Inhalt des Clipboard's auch ohne Customformate richtig interpretiert.

Um das Java-Word-Problem zu lösen, müsste man die native (platformabhängige) API der JVM mit einer Library (selbstentwickelt?) erweitern, die Java die Möglichkeit gibt mit dem Customformaten unter Windows zu interagieren. Imo ist das sehr aufwendig, nicht trivial und lohnt sich nicht.

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 21.01.2005 um 15:53 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
28.01.2005, 10:26
McE-Madden



okay ich danke dir!

nun muss ich eine andere lösung finden.. entweder auf c++ umbasteln oder den tastendruck [strg][c] simulieren.. also das java programm gaukelt dem Computer vor dass [strg][c] gedrückt wird.. währ auch ne lösung, weil dann versteht word wenigesten ansatzweise dass es ne tabelle ist.
wie kann ich sowas realisieren.. klar button remote betätigen iss ja kein akt aber einen "USER-Tastendruck" vorteuschen ?!...

bin auf antworten gespannt.

--

EJOT Productions
Game & Web Development

zum Seitenanfang zum Seitenende Profil || Suche
012
28.01.2005, 14:20
HammerBlade



Warum willst du denn Strg+C simulieren? Das hilft dir nicht bei deinem Problem mit den Clipboardformaten, die Word sagen, dass der Inhalt des Clipboards als Tabelle zu interpretieren ist.

Du kannst entweder dein Progamm in C++ programmieren, oder ein C++ Programm als "Zwischenhändler" zwischen Java und dem Clipboard benutzten. Im Detail: Dein Java-Programm interagiert nicht direkt mit der Clipboard, sondern es interagiert mit dem C++-Programm, welches dann mit dem Clipboard interagiert und auch die richtigen windowsspezifichen Formate setzet, damit Word den Inhalt auch als Tabelle interpretiert.

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way


Dieser Beitrag wurde am 28.01.2005 um 14:30 von HammerBlade bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche