This page (revision-22) was last changed on 03-Jan-2011 16:54 by ThomasBayen 

This page was created on 01-Sep-2008 13:19 by ThomasBayen

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
22 03-Jan-2011 16:54 14 KB ThomasBayen to previous Linkliste zu Wizards in Swing
21 03-Jan-2011 15:26 14 KB ThomasBayen to previous | to last Linkliste zu Wizards in Swing

Page References

Incoming links Outgoing links

Version management

Difference between version and

= Swing-Tips =

Bei der Arbeit mit Swing stößt man fast ständig an Besonderheiten und Eingenschaften, deren genaue Funktion man sich erst erarbeiten muss. Um solche Dinge für Andere Menschen und für mich zu erhalten und um vielleicht selber von den Tipps anderer Javaner zu profitieren, habe ich diese Seite begonnen, um sie hier zu erklären.



== Application Framework ==

Wer stärker bemuttert werden will als Swing alleine das vermag, kann mit einem Framework oder einer sog. Plattform viele Basis-Aufgaben einer Applikation wie z.B. die Erstellung von Fenstern, Menüs, aber auch nicht-Swing-Problemen, an eine Bibliothek abgeben. Hierzu gibt es den Artikel JavaApplicationFramework.



== JTable wie ein Spreadsheet benutzen ==

Der eigentliche Sinn einer editierbaren JTable ist meiner Meinung nach, dem Benutzer halbwegs das Gefühl zu geben, das er beim editieren eines Spreadsheets (also in MS Excel oder ~OpenOffice.org Calc) hat. Leider ist das "Feeling" etwas anders, was meiner Meinung nach unnötig die Benutzer verstört. Ideen hierzu finden sich auf der Seite JTableAlsSpreadsheet.


== Zuordnung von Tastenfunktionen ==

In einer Tabelle hatte ich damit gekämpft, daß man mit TAB nicht in die nächste Tabellenzelle kam. Der Fehler lag ganz woanders, aber ich habe etwas über die Zuordnung von Tasten zu Aktionen gelernt. Wer also wissen will, wie besondere Events wie z.B. Cursortasten, TAB, oder auch Mausaktionen zugeordnet werden, sollte einfach im ganz normalen [JavaTutorial|http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html])fündig nachlesen. Dort ist sehr gut erklärt, was es mit ~InputMap und ~ActionMap auf sich hat.


== Actions ==

Das [Action|http://java.sun.com/javase/6/docs/api/javax/swing/Action.html]-Interface ist eigentlich eine recht gute Grundidee. Eine von einem Programm ausführbare Funktion wird abstrahiert als Action verpackt und kann dann z.B. einem Button und/oder einem Menü zugeordnet werden. Leider reicht die Implementation der Standard-Klassen vorne und hinten nicht aus, um komfortabel zu arbeiten. Auf der Seite JavaActions werden einige Aspekte von Actions diskutiert.


== Zelle in einer Tabelle aktiveren ==

Wer durch ein Programm (also nicht durch anklicken) eine Zelle aktivieren will, muss sich genau überlegen, was er denn nun will. Es gibt die Selektion der Tabelle und das Feld, auf dem der TAB-Focus liegt und dann kann es noch einen geöffneten Editor (mit und ohne Tastatur-Focus) geben. All dies sind komplett unterschiedliche Dinge. Das Ergebnis, das man am ehesten erwartet (das dem Klick mit der Maus am ehesten entspricht), gibt meines Erachtens nach folgender Code:

{{{
 table.requestFocusInWindow();
 table.editCellAt(2, 2);
 table.changeSelection(2, 2, false, false);
}}}
mit den folgenden Befehlen wird die Selektion verändert:
{{{
 table.getSelectionModel().setLeadSelectionIndex(2);
 table.getColumnModel().getSelectionModel().setLeadSelectionIndex(2);
 table.getSelectionModel().setAnchorSelectionIndex(2);
 table.getColumnModel().getSelectionModel().setAnchorSelectionIndex(2);
}}}
evtl. ist das hier dann auch noch hilfreich:
{{{
 table.scrollRectToVisible(table.getCellRect(2, 2, true));
}}}

== richtig grosse Listen anzeigen ==

Das ~ListModel kann prinzipiell auch mit richtig grossen Listen umgehen. Dabei gibt es allerdings ein paar Tricks. Zum einen sollte man mit setPrototypeCellValue() einen Wert mit maximaler Ausgabegröße setzen, um zu verhindern, daß beim Erstellen des Widgets alle Elemente testweise gezeichnet werden, um das Größte zu finden.

Ein paar zusätzliche Schwierigkeiten ergeben sich, wenn man eine richtig grosse Liste in einer ~ComboBox verwenden will. Hier werden an mehreren Stellen Schleifen verwendet, um relativ simple Aufgaben zu lösen. Um das zu umgehen, müssen ein paar Methoden überladen und ein bisschen gehackt werden. Das würde allerdings hier den Rahmen sprengen. Wer eine Datenbank-taugliche Lösung sucht, kann mich fragen, ich habe hierfür eine abgeleitete Variante der ~ComboBox.  -- ThomasBayen


== Optimierung des Zeichnens unter Swing ==

Wer wissen will, wie in Swing was warum in welcher Methode gezeichnet wird und wer mehr über paint(), repaint(), update(), doubleBuffered, opaque und solche Sachen erfahren möchte, als er jemals wissen wollte, sollte diesen Artikel lesen:

http://java.sun.com/products/jfc/tsc/articles/painting/

Wer wissen will, was sein Programm so treibt, kann dazu http://freedesktop.org/wiki/Software/Xephyr benutzen. Das ist ein Xnest-ähnlicher X-Server, der in einem Fenster arbeitet. Er hat einen Debug-Mode, der einem anzeigt, wann was gezeichnet wird. Das hilft dabei, mehrfache und unnötige refresh-Durchläufe zu finden.>>
<<
== sonstige Seiten zum Thema ==

<<* http://tips4java.wordpress.com/ - Blog mit sehr vielen hochinteressanten Tips zu Swing

In diesem Wiki sind die folgenden Seiten mit dem Schlagwort __Swing__ markiert:\\
[{HasTagOf Swing}]

----
[{Tag Java Swing}]