Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Applets oder Anwendung

<< < (3/4) > >>

Axel_Janssen:
Habe die große MultiThreading Offensive erst mal vertagt (Wochenende) und konzentriere mich erst einmal auf das Design des JApplets (Präsentationstermin morgen).

Das lief eine Weile super. Ich habe wie von JGoodies.com vorgeschlagen die Farben der Komponenten auf Windows-Typiesche Farben gelegt. Dafür hover ich mit einem Color-Picker über Windows-Guis, notiere die Farben und setze die entsprechenden Methoden. Vielleicht sollte ich besser über Notes hovern, aber das kann ich immer noch ändern, wennn der Prozeß klar ist.

Das lief super, bis ich zu dem Problem kam die Selection Color von ComboBox umzustellen (wenn ich eine ComboBox auswähle, leuchtet das ausgewählte item fröhlich in bissigen Sun-Lila.  ::)

Tja. Und mein Manning Buch meldet dazu folgendes, ohne eine Lösung anzubieten, was ich direkt an die de.comp.lang.java übergeben habe:

--- Zitat ---class javax.swing.JComboBox
This class represents a basic GUI component which consists of two parts:
- A pop-up menu (an implementation of javax.swing.plaf.basic.ComboPopup). By
default,
this is a JPopupMenu subclass (javax.swing.plaf.basic.BasicCombo-
Popup) that contains a <WICHTIGER_PUNKT>JList in a
JScrollPane</WICHTIGER_PUNKT>.
- A button that acts as a container for an editor or renderer component, and
an arrow button
that is used to display the pop-up menu.

und ein paar Seiten später:
Unfortunately, there is no easy way to access JComboBox's drop-down JList,
which prevents us from assigning new foreground and background colors.
Ideally,
JComboBox would provide this communication with its JList. We hope to see
this functionality in a future version.

Wie kann ich nun die Foreground/Background Colors in einem "auf nicht
einfache Weise" verändern?

--- Ende Zitat ---

HA. Und ein Kollesch namens Tobias Vogele gab genau 11 Minuten später eine Antwort  ;D (Auf Javaranch ist diese Frage nach wie vor unbeantwortet  >:( ) (gestern nacht gepostet).


--- Zitat ---Du kannst Der ComboBox ja einen Renderer mitgeben, was oft eh nötig ist,
wenn man nicht nur Strings oder ähnliches in der ComboBox hat. Und
dieser Renderer muß natürlich nicht die Farben der JList übernehmen,
sondern kann beliebige Farben benutzen.

Oder anders ausgedrückt:
Die Farben der JList sind nur ein höfliches Angebot an den Renderer,
diese zu benutzen. Was letztendlich angezeigt wird, ist allein Aufgabe
des Renderers. Und den kann man mit JComboBox#setRenderer setzen.

Grüße,

tobi

--- Ende Zitat ---

ich Tölpel. Hoffentlich krieg ich da jetzt nicht Haue.In der Api-Doc findet sich unter Interface ListCellRenderer (Link von getRenderer() auf JComboBox):


--- Zitat ---Identifies components that can be used as "rubber stamps" to paint the cells in a JList. For example, to use a JLabel as a ListCellRenderer, you would write something like this:

 class MyCellRenderer extends JLabel implements ListCellRenderer {
     public MyCellRenderer() {
         setOpaque(true);
     }
     public Component getListCellRendererComponent(
         JList list,
         Object value,
         int index,
         boolean isSelected,
         boolean cellHasFocus)
     {
         setText(value.toString());
         setBackground(isSelected ? Color.red : Color.white);
         setForeground(isSelected ? Color.white : Color.black);
         return this;
     }
 }


--- Ende Zitat ---


Probier das jetzt mal aus. (mit vernünftigen Farben).

Axel_Janssen:
Es funktioniert. Nur ist jetzt der Schieberegeler der JComboBox immer noch LILA. JComboBox ist wirklich eine Sch..ß-Komponente.

Axel_Janssen:
Scheint, wenn ich kein eigenes Look&Feel schreibe, nur über die statische Methode UIManager.put("someStrangeKeyIAmLookingFor", new Color(int r, int g, int b)) zu gehen.

Ziemlich Low Level für meinen Geschmack.
JComboBox sucks.


Axel

Axel_Janssen:
Ich kann alles relativ tirival verändern. Ausser die kleinen Pfeile zum hoch-/runter-scrollen der Scrollbar.
Die werden in der Klasse MetalScrollBarUI definiert.


--- Zitat ---in MetalScrollBarUI gibt es die Methoden
#createDecreaseButton und #createIncreaseButton
die jeweils einen MetalScrollButton extends BasicArrowButton
erzeugen. Und dort wird dann alles händisch im paint gemalt.

--- Ende Zitat ---

Tja. Könnte jetzt meinen eigenes Look and Feel entwickeln...


Fazit: Ich kann aus der Swing-API nicht diese Pfeile ändern, es sei denn ich verwende ein anderes Look-And-Feel.
Das Windows Look And Feel in Swing ist auch nicht so toll (ComboBoxen zu groß und läuft nur auf windows).

Es gibt aber Look & Feels als Komponenten zu kaufen. Z.B. auf JGoodies.com.
Der heavyweight components Ansatz von ibm-swt&Jface benutzt native OS-widgets. Da hat man diese Probleme nicht. Swing bastelt eigene, die dann auf allen OSes ungefähr gleich aussehen. Wenn man die dann nicht über die api manipulieren kann, ist das natürlich Mist.  

Es gab vor 10 Jahren in der Small-Talk Welt angeblich eine heftige Diskussion, ob LightWeight oder Heavyweight Components besser sind. Dort hat sich heavyweight durchgesetzt.

Also: zukaufen, selbst entwickeln oder mit dem vorhandenen Kompromisse in Kauf nehmen.

Gruß Axel

Axel_Janssen:
Look and Feel von Applets zusammengefaßt:

- Das default look and feel mit dem Sun-Lila und dem TU-dunkelgrau als dominierende Farben, ist IMHO auf Dauer eine schlechte Idee. Es paßt einfach nicht zu den sonstigen Windows-Anwendungen.
Da springt dem Sachbearbeiter der Kaffeelöffel auf der Tasse, wenn er das sieht!!!

- Das in Sun jdk mitgelieferte Windows-L&F ist auch nicht gut. Es funktioniert nur unter Windows und sieht noch nicht mal gut aus. Die ComboBoxen sind riesig.

- Man kann das L&F bis zu einem gewissen (und relativ hohen) Grade Windows-Liker machen.
Ein einfacher Trick ist sowas, bevor die Komponenten gepainted werden.

--- Code: ---javax.swing.UIManager.put("ScrollBar.thumb", new Color(204, 204, 204));

--- Ende Code ---
Man kann sich die keys herausgeben lassen.

--- Code: ---UIDefaults uiDefaults = UIManager.getDefaults();
        Enumeration e = uiDefaults.keys();
       
        TreeSet s = new TreeSet();
        while (e.hasMoreElements()) {
            String val = e.nextElement().toString();
            s.add(val);
        }
        Iterator it = s.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());    
        }

--- Ende Code ---
Man kann aber auch mit dem Trick nicht die Farben aller lightweight components verändern (z.B. die ArrayButtons von JComboBox nicht). Dafür muß man wohl ein eigenes L&F schreiben (wohl nicht so trivial).

- Als Icons sind die von Eclipse super (Eclipse runterladen, nach*.gif suchen, und dann hat man den Ordner). Man hat keine Lizenzprobleme.

- Man kann sich ein wirklich professionelles L&F von JGoodies kaufen. Preis schätzungsweise 500 Euro, bin mir aber noch nicht 100% sicher. Diese Lösung eines unabhängigen deutschen Entwicklers wird auch international in blogs gelobt.

--- Zitat ---After some technical talks and some more researching and testing with the JGoodies LooksPro Suite, i ve come to the conclusion that a lot of stuff inside this package is coded very well and the idea behind is just good. Its not only the look&feel which makes JGoodies apps look like sophisticated Windows applications, but also the way of handling things like layouts and dispatching best practices.

Also damn interessting were the tech talks with Karsten Lentzsch, the author of the jgoodies packages. He seems to be one of the most dedicated Frontend developers around. Hopefully he will be more involved with J2SE/Swing in the future, i think even the Swing team at sun could use some insights from karsten.

BTW my very own application is beginning to see the ray of lights and using JGoodies makes it look very pretty.

--- Ende Zitat ---

Als Alternative kann man SWT & JFace von IBM nehmen. Das benutzt Standard-Widgets des OS (heavyweight-component Ansatz). Für SWT & JFace existiert aber z. Zt. wenig Toolunterstützung und die Dokumentation ist auch deutlich schlechter als für swing. Es wird aber besser. Leute die beides kennen, sagen das swing vom Entwicklerstandpunkt aus komfortabler ist.

Gruß Axel

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln