UI Toolkit programmieren

fedarius

Mitglied
Hallo Community,

ich hab mal ne Frage zum Thema UI Toolkit.

Was muss man generell bedenken, um ein eigenes Toolkit zu programmieren?
Wie werden verschiedene Dinge z.B. bei Swing realisiert?

Hier mal meine Kernfragen:
- Werden bei Swing die Komponenten gezeichnet, also ist ein JButton letztendlich nur eine Zeichnung von Shapes und Fills?
- Wie läuft das mit den Events? Irgendwann und irgendwo muss das System ja ansetzten. Wie erkennt Java z.B. das über einen JButton gerade ein MouseOver stattfindet. Gibt es dafür einen Hintergrundprozess, der die Mouse-Koordinaten pixelgenau überwacht und auswertet?

Wäre super wenn wir da ein bisschen drüber sprechen könnten, will mir gern eine detailierte Vorstellung von der Funktionsweise machen.

Grüße

fedarius
 

Wildcard

Top Contributor
Bevor man da ins Detail geht, dir ist bewusst das ein benutzbares UI Toolkit zu entwickeln Millionen Euro und viele Mannjahre verschlingen wird?
 
T

Tomate_Salat

Gast
Was hast du vor? Ein komplett eigenes oder willst du Swing erweitern? Bei letzterem baust du auf JComponent auf und dir kann es egal sein, woher die Mouse-/Tastaturevents kommen, sie kommen einfach. Willst du ein komplett eigenes? Willst du wirklich für jedes OS eine implementierung schreiben? Du hast offensichtlich noch nie so nativ programmiert, sonst würdest du nicht fragen.

Vorweg: auf dieser Ebene hast du für einen Frame nicht soetwas gemütliche wie: "new JFrame()". Nein, rechne da mal etwa 100Zeilen mehr code dazu (wenns reicht, hatte mir das mal vor >1 Jahr angeschaut). Dann fehlen dir immernoch Buttons/Panels/Labels/LayoutManager. Hmm da bist erstmal eine Zeitlang beschäftigt. Wenn du aber noch willst, dass man diese dinge mittels Java selbst designen kann, ja dann, dann würde ich mal sagen: haste eine Lebensaufgabe ;-)
 

fedarius

Mitglied
Seht ihr mit so einer ANtwort habe ich gerechnet. :)

Ich habe mit Java in der Tat noch nie so dicht am System programmiert und bin deshalb auch hier um einen Eindruck zu gewinnen.

Mich würde es generell schon interessieren so ein Projekt zu starten, allerdings nicht mit der Premisse es auch unbedingt zur Perfektion zu treiben, es geht erstmal nur um eine Fallstudie und sowas wie Prototypen.

Willst du wirklich für jedes OS eine implementierung schreiben?

Da schließt sich z.B. schon meine erste Frage an, warum für jedes OS programmieren? Kann das nicht einfach auf Java2D aufsetzen, oder bringt das dann eine schechte Performance? Wie ganu macht das denn z.B. Swing, AWT oder SWT? Die werden doch auch mit Paint-Toolkits arbeiten, oder?
 
T

Tomate_Salat

Gast
Mit java kommst du nicht so dicht an das OS ran. Dafür brauchst du z.B. C/C++. Ich denke aber mal, das fällt weg, wenn du schon nach Java2D frägst.

Wenn du auf Java2D oder wie auch immer diese Toolkits bei SWT heisen setzt, dann sparst du dir natürlich die implementation für jedes OS.

Natürlich kannst du eigene Komponenten in Swing (& SWT) entwickeln (habe ich auch schon). Hier hast du aber auch wieder verschiedene Möglichkeiten:

1. du schreibst ein eigenes LaF (laut hören+sagen ein großer Aufwand, habe ich selber noch nie gemacht)
2. du modifizierst bestenden Komponenten
3. du baust eigene Komponenten, welche auf (in Swing: ) JComponent aufbauen
4. (puh, schwer in wenigen Sätzen zu erklären, aber ich versuchs: ) du entwickelst wirklich etwas komplett eigenes. Du hast z.B. einJ Panel, welches die Events entgegen nimmt und entscheided, welche Komponente jz diese Event bekommt. Ich glaube im RPGenesis-Projekt hier wurde mal soetwas von Steev vorgestellt (was man jz aber doch nicht verwendet).
 

fedarius

Mitglied
Ok, also am ehesten würde ich mich auf deinen 4. Vorschlag beziehen.

4. ... du entwickelst wirklich etwas komplett eigenes. Du hast z.B. einJ Panel, welches die Events entgegen nimmt und entscheided, welche Komponente jz diese Event bekommt.

Ich will nicht auf Swing oder SWT setzen, denn ich denke die drei großen Toolkit Swing, AWT und SWT erfüllen wirklich nicht mehr die Norm an moderne Programmiersprachen.

Wenn ich mir anschaue, wie einfach es z.B. in Flex 4 ist angenehme Oberflächen zu entwickeln, ohne 20.000 Zeilen Code und 40 Layoutmanager benutzen zu müssen.

Ich finde auch, dass die Anforderung, dass eine GUI zwangsläufig genau wie das OS aussehen soll albern ist. Wenn man ein gutes Toolkit hat, was gut Skinnbar ist (siehe Flex 4), dann stellt auch das kein Problem mehr dar.

Also um nochmal zum Kern zu kommen, wenn ich z.B. mit Java2D einen Kreis male und ihn ausfülle und will ihn z.B. als Button einfügen, wie generiere ich die verschiedenen Events, oder sind Shapes in Java schon Event Publisher?

Und wird es in Swing tatasächlich auch so gemacht, dass die Komponenten mit Java2D gezeichnet werden, oder wird da ein Toolkit genutzt, dass uns Normal-Java-Programmierern überhaupt nicht zugänglich ist?
 
T

Tomate_Salat

Gast
Wie kommst du darauf, dass die nicht mehr die Norm erfüllen? Wenn dir die bestehenden LayoutManager nicht gefallen, dann lade dir aus dem Internet welche, die dir besser zusagen oder schreibe dir diese selber.

Meine Punkteliste baut zwangsweise auf einem bestehenden auf: also Swing oder SWT. Letztendlich werden die Zeicheninformationen an das OS weitergegeben, aber bei Swing hast du im gegensatz zu AWT keine heavyweightkomponenten (unterschiede sehe: hier).

Also um nochmal zum Kern zu kommen, wenn ich z.B. mit Java2D einen Kreis male und ihn ausfülle und will ihn z.B. als Button einfügen, wie generiere ich die verschiedenen Events, oder sind Shapes in Java schon Event Publisher?

Nein, sind sie nicht. Aber JComponent kann Maus-,Fokus- und Tastaturevents entgegennehmen. Wie damit umgegangen wird, entscheided der Programmierer. Wie du siehst, bist du in dem Falle immernoch auf Swing angewiesen.
Verabschiede dich von dem Gedanken, die Messages vom OS selbst abfangen zu wollen, denn dafür musst du z.B. C einsetzen. Wenn du es dann noch Plattformunabhänig haben willst, darfst du das ganze für Windows, Mac OS X, Linux ,... entwickeln.
 

Wildcard

Top Contributor
Ach so ein Unsinn... das hier wurde auch als 1 Mann Hobbyprojekt entwickelt...

Das war jetzt Unsinn. Hast du dir die Mühe gemacht in den Quellcode zu schauen? Das basiert auf Swing und Jogl. Die Schwierigkeit ist das Wrappen der Betriebssystem API wenn man das von Swing/Jogl übernehmen lässt geht es primär darum einen Satz eigener Widgets zu entwickeln, dann kann aber nicht wirklich sagen ein eigenes UI Toolkit geschrieben zu haben, weil man Swing nicht verwenden will.

EDIT: SWT kommt übrigens auf einen geschätzten Wert von knapp 9 Million $ und Qt auf 70 Millionen.
SWT (Standard Widget Toolkit)
Qt


Und wird es in Swing tatasächlich auch so gemacht, dass die Komponenten mit Java2D gezeichnet werden, oder wird da ein Toolkit genutzt, dass uns Normal-Java-Programmierern überhaupt nicht zugänglich ist?
In Swing wird auf Betriebssystem API zugegriffen um zB Frames zu erstellen und um auf die Drawing Capabilities zuzugreifen. Die Widgets werden dann tatsächlich selbst gezeichnet. Bei SWT werden die Widgets des Betriebssystems direkt verwendet, es ist also ein möglichst dünner Wrapper um die API des OS.
In beiden Fällen hast du tatsächlich keinen Zugriff auf die zugrundeliegenden Routinen, denn das ist C Code.
Übrigens sind sowohl Swing als auch SWT skinbar. Bei Swing funktioniert das über die Look and Feels, bei SWT mit CSS.
Da dir Flex zu gefallen scheint würde ich mir JavaFX ansehen, da hat sich wohl inzwischen recht viel getan.
Qt steht auch noch zur Wahl falls dir das eher zusagt.
Von der Idee ein eigenes UI Toolkit zu schreiben würde ich aber Abstand nehmen wenn du nicht für einen Major Player in der Softwareindustrie arbeitest der bereit ist ein größeres Commitment einzugehen, denn das ist kein kleiner Task.
 
Zuletzt bearbeitet:

fedarius

Mitglied
Vielen Dank für die Hinweise.

Werde jetzt wohl auf Swing aufsetzen und versuchen einige eigene Komponenten zu entwerfen.
Mal sehen was daraus wird. ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JavaFX - Toolkit not initialized AWT, Swing, JavaFX & SWT 6
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
S toolkit vs. imageIO AWT, Swing, JavaFX & SWT 4
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
E Problem mit Toolkit.getImage() AWT, Swing, JavaFX & SWT 1
Z Cannot load AWT toolkit AWT, Swing, JavaFX & SWT 3
C Welches Toolkit für GUI AWT, Swing, JavaFX & SWT 2
N Swing Kugel/Sphäre programmieren AWT, Swing, JavaFX & SWT 12
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
H LayoutManager RPG Programmieren, eigenes Spielfeld grafisch generieren aus Tileset AWT, Swing, JavaFX & SWT 18
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
T Wie kann man in java aufwendige grafiken programmieren AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Sprung programmieren AWT, Swing, JavaFX & SWT 35
M Nutzer interface Programmieren AWT, Swing, JavaFX & SWT 2
J Kleines Helikopterspiel programmieren AWT, Swing, JavaFX & SWT 2
R kleinen JPanelEditor programmieren AWT, Swing, JavaFX & SWT 3
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
2 Senso bzw SimonSays programmieren AWT, Swing, JavaFX & SWT 8
T Möchte Android-ähnlich programmieren AWT, Swing, JavaFX & SWT 7
R Eclipse GUI Programmieren AWT, Swing, JavaFX & SWT 8
I LookAndFeel HTML Auflösung - Online Editor programmieren AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Menü programmieren AWT, Swing, JavaFX & SWT 2
J Swing Landkarte mithilfe von Swing programmieren AWT, Swing, JavaFX & SWT 4
T Kleinen "Gui Builder" programmieren AWT, Swing, JavaFX & SWT 12
SexyPenny90 Wie Ball programmieren, der im 4 Eck rum fliegt AWT, Swing, JavaFX & SWT 7
I Rechner programmieren AWT, Swing, JavaFX & SWT 6
3 Eigenes Frame/Window programmieren AWT, Swing, JavaFX & SWT 2
S Desktop Programmieren AWT, Swing, JavaFX & SWT 2
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
C Swing Orderbook programmieren AWT, Swing, JavaFX & SWT 6
B Editor programmieren AWT, Swing, JavaFX & SWT 26
LittleJavaCup Suchmaschine programmieren (wie bei Windows) AWT, Swing, JavaFX & SWT 2
T AWT verschiedene Oberflächen programmieren AWT, Swing, JavaFX & SWT 5
vandread Swing Probleme mit "Game of Life" programmieren AWT, Swing, JavaFX & SWT 8
J Modelleisenbahn - Kontroll-Tafel programmieren AWT, Swing, JavaFX & SWT 3
L Regler in Java Programmieren AWT, Swing, JavaFX & SWT 12
I Preisvergleich programmieren AWT, Swing, JavaFX & SWT 4
P Swing Roter Faden beim Applet GUI Programmieren AWT, Swing, JavaFX & SWT 2
J FAQ programmieren, welche Swing-Elemente AWT, Swing, JavaFX & SWT 7
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
C Zeitplaner: Terminblock programmieren AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben