AWT Component in OpenGL anzeigen?

Friedhelm

Bekanntes Mitglied
Kann mir jemand sagen wie ich eine Componente (Quicktime View, JPanel, etc) unter Open GL anzeige. Ich habe sowas schon mal irgendwo gesehen. Da wird wohl die Graphics2D der Componente in eine Textur geschrieben und dann bei Clicks an das AWT weitergeleitet (vermute ich einfach mal :rtfm: ).

Wäre nett, wenn mir jemand einen kurzen Codeschnipsel hier ins Forum hängen könnte, damit ich das Prinzip in Live-Code sehen könnte (AWT Component Copy => Texture => Clicks)
 

Marco13

Top Contributor
Für Swing hatte ich mal Swogl gebastelt. Leider hatte ich schon lange, lange (viel zu lange :( ) keine Zeit mehr, daran wirklich produktiv weiterzumachen, aber die Priorität erhöht sich ständig. Für reine AWT-Components funktionierte das aber nicht, die werden ja "vom Betriebssystem spendiert".
 

Friedhelm

Bekanntes Mitglied
Wow, das sieht ja mal richtig nice aus :applaus:

Werd ich mir gleich mal ansehen und damit ein wenig rumspielen.
Hast Du damit schon erfolgreich auch Videos auf eine Textur abspielen können (mit einem Java-Video-Codec oder von einer Quicktime-Componente)?
 

Marco13

Top Contributor
Ja, ist aber noch in einem frühen Stadium. "Intern" habe ich schon einige (deutliche) Umstrukturierungen angefangen, aber davon ist noch nichts final.
Ein Video wollte ich schon ewig mal darauf abspielen. Könnte in bezug auf die Performance schwierig werden, aber mit einem einigermaßen modernen Rechner sollt's klappen :) Ich hätte mir dazu erstmal ein bißchen was aus dem Java Media Framework angeschaut, dort gibt es ja schon eine Video-Componente. DIE ist zwar AWT, aber vielleicht könnte man die ja anpassen...
 

Friedhelm

Bekanntes Mitglied
Das hört sich gut an. Ja JMF (wegen dem Video -> Jogl) habe ich mir angesehen, nur läuft das nicht unter Mac.

Eine Frage, kannst Du mir sagen warum Swogl eine hohe CPU Auslastung produziert?
Bei meinen Versuchen habe ich eine CPU Auslastung von ca. 50-60% (wenn ich nichts mache, System: MacMini 2009 late, 2.2 Ghz CPU NVidia 9400M Grafikkarte, 4 GB Ram)

Kommt das daher weil die Componenten eben aufwendig gezeichnet werden müssen?
 
Zuletzt bearbeitet:

Friedhelm

Bekanntes Mitglied
Ok, den Quellcode habe ich mir angesehen. Du benutzt den TextureRenderer wie ich gesehen habe.

Mal ein paar Gedanken zu Swogl...
Was ich mir wünschen würde ist ein sehr schmales System ohne jeglichen Schnickschnack (3DLayout, 3D Animatied, etc).

Sprich ich baue mir ein JPanel mit ein paar Swing komponenten, mache ein paar ActionListeners drauf, und dann mit einem Funktionsaufruf: dropIntoOpenGL(SwingCompomponente) kann ich das in meine OpenGL3D Welt einbauen. Dann kann man im OpenGL 3D Raum die Swing-Komponente bedienen (ohne Verschieben und Resize im 3D Raum).

Ich meine, das 3D Handling etwa wie: verschiebe 3D Objekt im Raum, macht man meistens sowieso selber, weil man da eigene Vorstellungen hat, oder es zwangsläufig anders machen muss. Weiss nicht wie ich es genau ausdrücken soll, aber es geht ja bei Swogl darum das Problem Swing Componenten auf OpenGL anzuzeigen, und darauf sollte man sich beschränken. Und nicht Lightning, Camera, Movement.

Alternativ könnte man noch eine "generelle" Beispiel-Picking/Resiziung Demo machen, wo im 3D Raum ein Objekt von der Maus gepickt und im 3D Raum bewegt/Resized werden kann. Ich denke das ist sinnvoller als eine eigene 3D Welt mit Swing aufzubauen, wobei 80% davon für die meisten Einsätze nicht gebraucht werden.

Was hälst Du davon? Übrigens sollte man auf GLPanel verzichten und alles in GLCanvas rendern, weil wenn schon OpenGL, dann richtig :toll:

Ich werde mir auch mal den TextureRenderer von Jogl mal ansehen, denn ich glaube nicht das es den in LWJGL gibt... dann muss ich mir wohl das was ich oben beschrieben habe, irgendwie selber zusammenbasteln, da ich genau sowas kleines flexibles für mein System brauche. Mal schaun. ob ich das gebacken bekomme :rtfm:

Alternativ dazu, wenn Du Zeit und Lust dazu hast, könnte man das zusammen realisieren (Zeitplan ca. 1 Monat zur Fertigstellung und Optimierung). Im Prinzip braucht man ja nur eine Funktion: dropMyJPanelIntoOpenGL3D(SwingCompomponente) :D
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Wie schon gesagt: Swogl liegt schon länger "brach" als mir recht sein kann. Ich glaube, dass es eine ganze coole Bibliothek sein/werden könnte, wenn ich die Möglichkeit hätte, mehr Zeit zu investieren. Einige der Punkte, die du angedeutet hast, liegen schon in der Pipeline und wurden auch schon ansatzweise umgesetzt, aber um sie "gut" umzusetzen müßte ich mal wieder richtig ranklotzen. (Ich werd' wohl wirklich auf Teilzeit umstellen. Jeden Tag 8 Stunden sinnlos im Büro rumhängen ist ätzend....)


Was ich mir wünschen würde ist ein sehr schmales System ohne jeglichen Schnickschnack ...
Sprich ich baue mir ein JPanel ... mit einem Funktionsaufruf: dropIntoOpenGL(SwingCompomponente) kann ich das in meine OpenGL3D Welt einbauen.
Ich meine, das 3D Handling etwa wie: verschiebe 3D Objekt im Raum, macht man meistens sowieso selber...
Alternativ könnte man noch eine "generelle" Beispiel-Picking/Resiziung Demo machen...


Diese Punkte sind genau die Ziele des "Refactorings": Es sollte mehrere Schichten geben, auf denen man Swogl verwenden kann. Einerseits einfach eine Methode, wo man eine Swing-Component reinsteckt und ein OpenGL-Objekt rausbekommt. Darauf aufbauend (aber soweit das sinnvoll möglich ist, getrennt davon) eine Bibliothek, mit der man 3D GUIs basteln kann, mit 3D Layout & Co.

Im Moment ist die Richtung ja eher die umgekehrte: Es gibt Swogl, mit dem man 3D-GUIs bauen kann, und mit ein bißchen Getrickse könnte man vielleicht noch eigene Sachen dazurendern, aber Swogl selbst ist die "Hauptanwendung". Das entspricht eigentlich nicht den meisten potentiellen Anwendungsfällen...

Aber das ganze so als "add on" für beliebige 3D-Szenen umzusetzen ist wirklich nicht einfach. Wenn du dir den Code schon angesehen hast, hast du vielleicht gesehen, dass da ziemlich "getrickst" wird. Das Event-Handing und Repainting bei Swing ist nicht so trivial, wie es bei reiner Verwendung von Swing vielleicht aussieht. Da hat man einen Listener hier und einen Repaint-Aufruf da, alles schön einfach. Aber in Wirklichkeit muss ein JButton eben gehighlightet werden, wenn man mit der Maus drüberfährt, und ein Cursor muss blinken, und z.B. für letzteres gibt es praktisch keine Events, die man dafür abgreifen könnte...


Was hälst Du davon? Übrigens sollte man auf GLPanel verzichten und alles in GLCanvas rendern, weil wenn schon OpenGL, dann richtig

Ich werde mir auch mal den TextureRenderer von Jogl mal ansehen, denn ich glaube nicht das es den in LWJGL gibt... dann muss ich mir wohl das was ich oben beschrieben habe, irgendwie selber zusammenbasteln, da ich genau sowas kleines flexibles für mein System brauche. Mal schaun. ob ich das gebacken bekomme


Das wäre das erste, was ich in Angriff nehmen würde: Eine Verallgemeinerung in bezug auf die OpenGL-Anbindung! Im Moment wird noch JOGL 1.1.1a verwendet, mit OpenGL 1.x - sprich, glBegin, glPushMatrix, und all die Späße. Erstens sollte das ganze in Zukunft auf OpenGL 3.2 aufbauen: Man muss sich nur überlegen, was man mit ein paar schönen Shadern alles machen könnte. Zweitens (ganz wichtig) sollte es unabhängig(er) von JOGL werden, weil JOGL nicht ganz so straff weitergepflegt wird. Als erstes sollte es natürlich auch LWJGL unterstützen, aber das ganze natürlich so schön allgemein beschrieben und strukturiert, dass man irgendwann sowas hat wie
Java:
// Swogl.useRenderer(new JOGLRenderer()); // Och nö, heute mal nicht
Swogl.useRenderer(new LWJRLRenderer()); 
// TODO: Swogl.useRenderer(new JMERenderer());

Auch der TextureRenderer gefällt mir nicht so, erstens natürlich weil er sehr speziell für JOGL ist, und zweitens weil er zwar einfach zu verwenden, aber für manche Sachen doch zu unflexibel ist. (Wobei es genau der TextureRenderer war, der überhaupt die Initialzündung für Swogl dagestellt hatte: "Hey, da gibt's ein 'paint(Graphics)' - da kann man ja Swing in Texturen rendern ... :reflect: ... " :) ). Zu diesem Punkt gab es hier im Forum auch schon gelegentlich Diskussionen. Insbesondere würde ich gerne mal einem BufferedImage einen DataBuffer unterjubeln, der direkt in den Grafikkartenspeicher führt.

Alternativ dazu, wenn Du Zeit und Lust dazu hast, könnte man das zusammen realisieren (Zeitplan ca. 1 Monat zur Fertigstellung und Optimierung). Im Prinzip braucht man ja nur eine Funktion: dropMyJPanelIntoOpenGL3D(SwingCompomponente)

Jein. Natürlich würde ich mich über Unterstützung freuen (und es wäre ein willkommener Anlass, selbst mal wieder richtig an Swogl zu arbeiten. Aber 1 Monat ist nicht. Sorry. Allein die Fragen, wie man von der Ziel-Engine abstrahiert und wie sie verwaltet werden, und wie man das Event-Handling (ohne den im Moment in Swogl verwendeten "Trick") macht, werden deutlich (!) mehr Zeit benötigen. (Z.B. ist die Umstellung zwischen GLJPanel und GLCanvas wegen heavy/lightweigt-Problemen nicht so einfach).

Wie die Geometrie repräsentiert wird, welche Shader verwendet werden, WO und WIE man die Trennlinie zieht zwischen der "machMir3D(panel)"-Bibliothek und dem 3D-Swing wären dann Fragen, die teilweise später geklärt werden könnten, aber darüber Gedanken machen sollte man sich schon vorher.

Es gibt übrigens ein (englisches) Forum zu Swogl: Swogl - Byte-Welt Forum und wenn man HIER im Forum nach "Swogl" sucht, findet man etliche Threads zu den oben genannten Themen, und Dingen, die noch darüber hinaus gehen.

So. Das letzte Update auf der Website stammt von 2009 - so kann das nicht weitergehen! :) Inzwischen bin ich wieder auf dem Stand, dass ich in der kommenden Woche endlich mal wieder an Swogl weiterzumachen werde :toll:
 

Friedhelm

Bekanntes Mitglied
Das hört sich gut an.

Ich habe auch herausgefunden warum Swogl so langsam ist... das liegt am "setLookAndFeel"
Alles ausser "Nimbus" braucht zu viel Renderzeit. Ich denke das liegt einfach an den vielen Images die da drinstecken und die bei jedem Update neu gerendert werden müssen. Da scheint "Nimbus" wohl nicht so viel drin zu haben.

Ich würde "Swogl" auch einen anderen Namen geben, etwa "SwingGLProjektor" und dann mir die Funktionen ansehen:
- TextureRenderer
- 3D Picking

... dann den ganzen Kram ohne den ganzen Ballast coden (alles endlos verschachtelte raus).

Ich für meinen Teil habe schon überlegt den ganzen Listener Kram in meinem 3D Projekt wegzulassen und das alles zu vereinfachen. Die Mausabfragen selber zu verarbeiten und den Code immer weiter zu vereinfachen. Man glaubt garnicht was da alles möglich ist. Mein Projekt hatte vorher ca. 20 Java Dateien, übriggeblieben sind nur noch 6. Und wenn man sich den Code ansieht: sehr leicht verständlich, übersichtlich, klein, universell.

Ich habe mir die letzten 2 Tage CyberDuck (FTP Programm für Mac) angesehen... oh mein Gott... Librarys ohne Ende... Codezeilen ohne Ende. Ich meine, Librarys verwenden schön und gut, aber das bläht das Projekt dermassen auf und keiner steigt mehr so richtig durch... und Fehler finden, naja (das dauert). Hatte mir CyberDuck wegen Rococoa/Cocoa NS Objekte angesehen, da in Rococoa nur das notwendigste implementiert ist und CyberDuck die Cocoa Library um ca. 60% erweitert :D

Jedenfalls ist es der Wahnsinn was einige mit Java und Bliotheken anstellen :shock:


Tip: Man darf nicht "schauen" was einen an Arbeit erwartet, sondern mit der kleinsten Einheit "anfangen".

So würde ich es auch machen und anfangen bei::rtfm:

[Java]
SwingGLProjektor {

Vector<Box3D> boxes = new Vector<Box3D>();

buildSwing3DBox(JPanel swingPanel) {

Box3D box = new Box3D();
box.buildTextureFromJPanel(swingPanel);
boxes.add(box);
}

update3DBoxes() {

// * CheckMouse Moves/Clicks *
mousePickCheckAndForwardToBox3D()

// * draw 3D Boxes *
for(int i=0; i<boxes.size();i++) boxes.elementAt(i).render();
}

mousePickCheckAndForwardToBox3D() {

getBox = worldMousePick();
if(getbox.worldAction) getbox.update3DBoxPosition();
if(getBox.swingAction) getbox.update2DSwingComponent();
}

}

Fertig. Dabei ist es erstmal vollkommen egal ob Jogl oder LWJGL (ich würde erstmal Jogl 1.1 verwenden) Dann später es unversalisieren :D

[/Java]


... und schon wird man sehen, dass man dazu nicht 2 Monate, sondern nur 2 Wochen benötigt :toll:
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ach ja die Rechenzeit: Bezog sich das auf das Beispiel mit der "Rumswogelnden" (animierten) Component? Die hat auch eine ziemlich hohe Auflösung und so, das ist wohl nicht repräsentativ... Normalerweise sollte, wenn man nichts macht, auch keine Rechenzeit verbraten werden, abgesehen von Neuzeichnen bei Cursorblinken und solchen Sachen. Es gibt im Quellcode an ein paar Stellen aber auch noch Kommentare, was noch optimiert werden könnte. Aber erstmal sollte es alles einigermaßen funktionieren...

Das mit dem Code... klingt... ... ... ohne dir zu nahe treten zu wollen... schon ein bißchen naiv. Natürlich schüttelt man so eine Bibliothek nicht from scratch komplett einfach aus dem Ärmel. Irgendwo muss man anfangen. Und so ein paar Zeilen aufschreiben, um sich klar zu werden, wie man das ganze gerne verwenden können wollte, ist ja gut. Aber von der Frage, was eine "Box3D" sein soll, über die Frage, wie und wo Texturen repräsentiert werden, bis hin zu der Methode "mousePickCheckAndForwardToBox3D" (die auch [c]doEverythingThatSwoglDoes[/c] heißen könnte :D ) gibt es da etliche Punkte, die man nicht mal so an einem nachmittag hin-hackt. Und wenn, dann kommt da mit Sicherheit nichts raus, was man anderen zumuten kann.
 

Friedhelm

Bekanntes Mitglied
Ach ja die Rechenzeit: Bezog sich das auf das Beispiel mit der "Rumswogelnden" (animierten) Component?

Ja, aber bei "Nibus" verbraucht die CPU nur 30% ... bei allen anderen ca. 65-70% :)

Das mit dem Code... klingt... ... ... ohne dir zu nahe treten zu wollen... schon ein bißchen naiv.

Soll es auch. :oops:

Natürlich schüttelt man so eine Bibliothek nicht from scratch komplett einfach aus dem Ärmel.

Ich denke der Fehler ist schon in denken von Bibliotheken (da schaltet das Gehirn schon automatisch auf "bombast" = Haufen Arbeit).

Aber von der Frage, was eine "Box3D" sein soll, über die Frage, wie und wo Texturen repräsentiert werden, bis hin zu der Methode "mousePickCheckAndForwardToBox3D" (die auch doEverythingThatSwoglDoes heißen könnte ) gibt es da etliche Punkte, die man nicht mal so an einem nachmittag hin-hackt. Und wenn, dann kommt da mit Sicherheit nichts raus, was man anderen zumuten kann.

Sollte man denken, muss es aber nicht zwangsläufig. Man kann auch an einem Nachmittag ziemlich schnell geniale Sachen machen, wenn man sich auf das notwendigste und nicht auf das kompletteste konzentriert. :oops:
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Bei Nimbus läuft beim Zeichnen intern einiges anders. Mit den Details habe ich mich noch nicht sooo weit auseinandergesetzt, aber bei den anderen LAFs wird alles vom jeweiligen UI selbst gezeichnet, und beim Nimbus wird eher "beschrieben" wie das GUI aussehen soll, und es werden dann generische Zeichenmethoden verwendet (da kann man wohl sinngemäß sein LAF mit XML beschreiben...). Wo genau der Performanceunterschied herkommt, weiß ich aber auch nicht...

Wenn es nun um die Frage geht, ob das eine Bibliothek werden soll, oder eine kleine Hilfsklasse: Letzteres wird nicht reichen. Man kann zwar mit wenig Aufwand an einem Nachmittag ein Programm schreiben, das eine Swing-Component als Textur auf eine JOGL-Geometrie klatscht. Und natürlich ist die "Kernidee" ganz einfach:
Java:
public void paint(Graphics g)
{
    super.paint(texture.getGraphics());
}
...
public void mouseMoved(MouseEvent e)
{
    passTo(targetComponent(), e);
}
Aber das kann eben aufwändig umzusetzen sein. Wenn man dann in der Event-Queue rumwerkeln muss, damit die Events da ankommen, wo sie hinsollen, und man dem RepaintManager klar machen muss, wo die Textur aktualisiert werden muss, und auf einmal eine ComboBox aufklappt, deren Menü über die Component, wo sie eigentlich drinliegt, hinausragt, und bei der Scrollpane nicht richtig gezeichnet wird, weil sie intern diese cleveren bit-blit-Tricks verwendet, und man nach stundenlangem Wühlen im Swing-Quelltext festellt: "Mensch, der Separator von einem JSplitPane ist heavyweight - aber nur, während man ihn bewegt :autsch: ", merkt man: Das ist nichts für eine Utility-Klasse.

Sicher könnte man bei Swogl etliches weglassen, wenn man keine animierten Layouts will, und keine Interaktion mit den Components, die über die reine Bedienung der Swing-Elemente hinausgeht. Auch das hätte noch genug Stolperfallen. Aber Swogl sollte eben all diese Möglichkeiten bieten. In einer anderen (sauberer getrennteren und aufgeräumteren) Form als jetzt, aber es sollte sie geben.

Du kannst ja mal versuchen, ein Utility zu schreiben, das so funktioniert, wie du es angedeutet hast (Ohne bei Swogl zu klauen ;) ). Und wenn du zum fünften oder zehnten mal denkst: "Ach eigentlich wollte ich das so-und-so machen, aber dazu muss ich erst das-und-das machen, und dafür brauche ich erst dies-und-jenes (mal googlen ob's da nicht schon was fertiges gibt ;) ) und so-und-so funktioniert das eh nicht....", und dein Utility sich dann langsam in eine Bibliothek verwandelt, wirst du merken: Das ist nicht so einfach, wie es aussieht. Dann kann man nur versuchen, es (durch eine "gute" API) für den Benutzer der Bibliothek einfach aussehen zu lassen....
 

Friedhelm

Bekanntes Mitglied
Du kannst ja mal versuchen, ein Utility zu schreiben, das so funktioniert, wie du es angedeutet hast (Ohne bei Swogl zu klauen ). Und wenn du zum fünften oder zehnten mal denkst: "Ach eigentlich wollte ich das so-und-so machen, aber dazu muss ich erst das-und-das machen, und dafür brauche ich erst dies-und-jenes (mal googlen ob's da nicht schon was fertiges gibt ) und so-und-so funktioniert das eh nicht....", und dein Utility sich dann langsam in eine Bibliothek verwandelt, wirst du merken: Das ist nicht so einfach, wie es aussieht. Dann kann man nur versuchen, es (durch eine "gute" API) für den Benutzer der Bibliothek einfach aussehen zu lassen....

Da ist was wahres dran. Klar. Man kann das auch nicht von der 1. Version verlangen. Denke das ist ganz normal. Die Probleme mit den Swing Elementen, da hast Du sicher mehr Erfahrung und kennst die ganzen Probleme. Die ganzen Stolperfallen kenne von vielen anderen Sachen und Du hast recht, gerade da verbrät man manchmal Tage nur um ein kleines Problem zu lösen :D

Aber ich bin auch immer der Meinung... da geht immer was besser, und es muss nicht immer das sein was einem andere weiss machen wollen :rtfm: denn ich habe schon so oft erlebt, dass andere in ganz anderen Bahnen denken, und genau deshalb nicht auf die Lösung kommen, die Du aber siehst, oder Dir zumindest durch andere Denkweise erarbeiten kannst.

Naja, bleib auf jeden Fall dran, ich bin jedenfalls beeindruckt von Swogl. Und ich denke wenn Du die ganze Sache noch mehr Handy machst, dann werden Dir viele dafür sehr dankbar sein.

Achso... anstatt die Textur zu resizen von einer 3D Box (wenn man mit ALT-Taste und mit dem Mauszeiger am Box-Rand ist), solltest Du die 3D Box selber in der Größe ändern.
 

Marco13

Top Contributor
Ja, das stimmt natürlich: Es kann leicht mal passieren, dass man sich in eine Problematik (oder ganz speziell: in ein spezifisches Problem, das man glaubt, unbedingt lösen zu müssen) "verrennt", und damit Zeit verschwendet, und jemand anderes vielleicht sagen würde: "Das ist doch gar nicht wichtig", oder (was noch deprimierender ist) sagt: "Dazu kannst du einfach die Methode [c]com.sun.java.secret.Magic#doesWhatYouWant()[/c] aufrufen und fertig!" ;)

Aber wie schon gesagt: Der Teufel steckt im Detail. Swing sieht einfach aus (wenn man es anwendet), und Swogl sieht einfach aus (wenn man es anwendet und sowas wie den TextureRenderer kennt), aber das beides zu verheiraten IST NICHT einfach. Mit den verwendeten "Tricks" ist es zwar auch kein überirdisches Hexenwerk, aber eben auch nicht trivial.

Das mit dem Resizen ist eines der Probleme, die AUCH bei dem Refactoring gelöst werden sollen. Wenn man das ganze (wie du es angedeutet hast) darauf reduziert, eine Textur auf ein Objekt zu legen und Events weiterzureichen, stellt sich diese Frage zwar nicht, aber für den allgemeinen Fall tritt das Problem auf, dass einem einfach die Buttons ausgehen. Linke und Rechte Maustaste sind ohnehin belegt, und einige Swing-Components verwenden schon Modifiers wie STRG oder SHIFT um bestimmte Aktionen auszulösen. ALT macht unter Windows immer Probleme. Und wenn nun für den Fall des "SpaceLayouts" nach dazukommt, dass man sowohl
- die Geometrie der SwoglComponent als auch
- den Inhalt der SwoglComponent
in der Größe ändern können will, und dann noch drehen und verschieben, wird's eben knapp. Ansätze, wie man das lösen könnte, gibt es schon, aber die müssen noch genauer evaluiert (und im Hinblick auf eine bessere Trennung von Layout und Bedienung und die Möglichkeit, diese Interaktionen möglichst frei konfigurieren zu können(!) ggf. auch revidiert) werden. Im Moment kann man die Größe der Geometrie einer SwoglComponent, wie du es angedeutet hast, durch STRG+SHIFT+ZiehenMitMittlererMaustaste ändern (soweit ich mich erinnere). Ja, man sieht, das Refactoring ist dringend notwendig ;)
 

Friedhelm

Bekanntes Mitglied
;)

Das mit den vielen Tastekombinationen... da musst Du aufpassen. In absehbarer Zeit bedient kein Mensch mehr seinen Computer mit der Maus/Keyboard.

Ich würde den ganzen kram ummodelieren in ein TouchMenu. In etwa irgendwo auf dem Screen einen Button setzen, und wenn man dort draufdrückt, dann kann man Optionen wählen (Drehen/Zoomen/ etc.)

Ich rüste mein Projekt auch gerade auf Touch only um, und behalte nur die linke Maustaste für noch Maus-Computer-Benutzung (Touch-Emulation) bei. Multi-Touch macht man dann mit Touch-ALT festhalten (1 Punkt), noch einen Punkt anklicken (2 Punkt) => Zoomen/Drehen.

Das ist nur ein möglicher Ansatz.
 

Marco13

Top Contributor
Auch DAS ist schon in der "Queue", wenn auch relativ weit hinten. Bis Maus und Keyboard wirklich tot sind, wird es noch eine Weile dauern. Und im Moment würde man dafür noch etliche externe Bibliotheken benötigen, weil die Unterstützung noch nicht sooo verbreitet ist. Aber wie man an dieser "iPhone-Musik-Browse-Demo" schon sieht, gibt es ja Sachen, bei denen sich Touch schon allein aus Prinzip aufdrängt ;)
Aber ein wichtiger Punkt dabei ist der, der ohnhin (auch bei Muassteuerung) schon ansteht, nämlich die Möglichkeit, das ganze besser konfigurieren zu können. Im Moment gibt's da nur so ein paar (zugegeben "halbärschige") Abfragen, ob die gewünschten Modifier-Tasten gedrückt sind, aber um das ganze flexibler zu machen, muss man sich was richtiges überlegen. Dazu gab's in diesem Beitrag schon einiges, aber alles noch sehr grob.
(Und wie du jetzt (Multi)touch noch zusätzlich in eine einzlene, kleine Utility-Klasse packen wolltest, würde mich mal interessieren ;) )
 

Friedhelm

Bekanntes Mitglied
(Und wie du jetzt (Multi)touch noch zusätzlich in eine einzlene, kleine Utility-Klasse packen wolltest, würde mich mal interessieren ;) )

Naja, bei mir läuft das so... ich such mir mögliche Lösungen. Stopf die in den Quellcode (sieht schrecklich aus, aber läuft :oops:) Dann beginnt die Optimierungsphase... und dann wird so lange optimiert bis es klein und schmal ist. Wenn dann die Struktur nicht mehr stimmt schreib ich's mit den neuen Erkenntnissen einfach neu. Und dann ist die Lösung nahezu perfekt für mich.

Ist zwar nicht professionell... und dauert manchmal 1-2 Jahre, aber ich bekomm das was ich will :D

(Ich bin leider kein Freund von tiefschürfenden und bis ins kleinste Detail ausgearbeiteten Konzepten ... ich weiß, das ist ein Problem :rtfm: ... ich mach mir einfach ne Skizze und programmierer drauf los. Das hat auch einen Vorteil, ich mache mir keine Gedanken über den "Aufwand" den ich für das Projekt betreiben muss, wo andere es aus Zeitangst erst garnicht beginnen)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ich finde auch, dass es keinen Sinn macht, ein Jahr lang zu planen und dann zu versuchen, das Ergebnis innerhalb eines Monats runterzuschreiben. Auch wenn manche Softwareingenieure das propagieren. Iteratives verbessern ist spätestens dann notwendig, wenn man die Software schon allein deswegen nicht planen kann, weil man vorher gar nicht weiß, ob das ganze überhaupt funktionieren wird. Und Swogl hat auch als ein verkümmerter JTree auf irgendeinem hackig reingeladenen OBJ angefangen. Aber spätestens wenn man gedenkt, das zu veröffentlichen, und andere das verwenden sollen, kann man eben nachher nicht mehr "einfach so was wegnehmen". Da gilt IMHO eher Gauss' Motto "Pauca sed matura".
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
C Swing Component bei Doppelklick löschen AWT, Swing, JavaFX & SWT 4
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
M Swing Component Resize AWT, Swing, JavaFX & SWT 7
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
W Swing Component mehrfach adden AWT, Swing, JavaFX & SWT 0
H Drag component out of window AWT, Swing, JavaFX & SWT 1
A remove(Component) funktioniert nicht; JTable AWT, Swing, JavaFX & SWT 4
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
Ebenius AWT Bug in Component.getLocationOnScreen() AWT, Swing, JavaFX & SWT 7
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
H Component Zerren AWT, Swing, JavaFX & SWT 5
S Swing Component vertikal und hochizontal zentrieren? AWT, Swing, JavaFX & SWT 5
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
C Problem mit remove(Component comp) AWT, Swing, JavaFX & SWT 23
A Java Konsolen Component AWT, Swing, JavaFX & SWT 6
G Swing Component.toString() was bedeutet flags AWT, Swing, JavaFX & SWT 8
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
algorismi AWT Tranparente heavyweight component AWT, Swing, JavaFX & SWT 2
R Swing Methode add([Component]) funzt nich AWT, Swing, JavaFX & SWT 7
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
U LayoutManager [GBL] Component aus einer Zelle löschen AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
C Flamingo Component AWT, Swing, JavaFX & SWT 2
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
K AWT/SWING intern - Wie funktioniert die Component-Ermittlung AWT, Swing, JavaFX & SWT 13
S Line Component in SWING AWT, Swing, JavaFX & SWT 2
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
C Syntax Highlighting Component AWT, Swing, JavaFX & SWT 2
O KeyBoardFocusManager - previous und next Component checken? AWT, Swing, JavaFX & SWT 2
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
0 Component austauschen und aktualisieren ? AWT, Swing, JavaFX & SWT 6
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
G "Rating Component" - Bewerten über JTable AWT, Swing, JavaFX & SWT 3
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
P Component ändern (repaint) AWT, Swing, JavaFX & SWT 9
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
B Component AWT, Swing, JavaFX & SWT 5
L Swing Component in Buffered Image AWT, Swing, JavaFX & SWT 6
G Component "finden" AWT, Swing, JavaFX & SWT 6
H Component fokussierbar machen AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
R Component einer Form herausbekommen AWT, Swing, JavaFX & SWT 3
T JMenu/JMenuItem Component auf der geaddet wurde AWT, Swing, JavaFX & SWT 16
B Component in JSplitPane aktualisieren AWT, Swing, JavaFX & SWT 2
G add(Component) in paintComponent erlaubt ? AWT, Swing, JavaFX & SWT 2
K Component einfügen in JPane AWT, Swing, JavaFX & SWT 5
M getSize von Component und ModelListener AWT, Swing, JavaFX & SWT 2
S Component auf Label zeichnen? AWT, Swing, JavaFX & SWT 3
R convertPointToScreen(Point p, Component c) AWT, Swing, JavaFX & SWT 5
R Component aus Container entfernen bzw. austauschen. AWT, Swing, JavaFX & SWT 6
C JPanel Component austauschen AWT, Swing, JavaFX & SWT 4
O 3D-Grafik OpenGL CubeMaps - Skybox Rendering AWT, Swing, JavaFX & SWT 0
X 3D-Grafik [OpenGL] First Person Camera AWT, Swing, JavaFX & SWT 2
E 3D-Grafik LWJGl OpenGL Version vor Erstellung des Displays abfragen AWT, Swing, JavaFX & SWT 2
B OpenGl lwjgl Verständnisproblem AWT, Swing, JavaFX & SWT 5
D OpenGL ansprechen AWT, Swing, JavaFX & SWT 2
N 3D-Grafik OpenGL FPS Einbruch AWT, Swing, JavaFX & SWT 18
N JOGL-Code != C OpenGL-Code? AWT, Swing, JavaFX & SWT 9
N 3D-Grafik OpenGL Texturindexe AWT, Swing, JavaFX & SWT 4
K OpenGL koordinatensystem AWT, Swing, JavaFX & SWT 7
ChillSn Geteiltes Fenster in Bedienoberfläche und OpenGL-Ausgabebereich AWT, Swing, JavaFX & SWT 11
S swing + openGL in c++? AWT, Swing, JavaFX & SWT 8
M Swing und OpenGL AWT, Swing, JavaFX & SWT 3
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
Lukas2904 Swing ID von WLAN Kamera anzeigen lassen. AWT, Swing, JavaFX & SWT 2
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben