"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

SOLVED: Java: eigene Swing componente, eigene UI klasse, wird nicht gefunden

Bimminger 14.01.2006 - 16:07 817 2
Posts

Bimminger

christoph-bimminger.at
Avatar
Registered: Nov 2001
Location: Linz
Posts: 684
UIDefaults.getUI() failed: no ComponentUI class for: at.chrisone.swing.combo.JCalculatorComponentComboBox[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=16777224,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,selectedItemReminder=]
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:689)
at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:117)
at javax.swing.UIDefaults.getUI(UIDefaults.java:719)
at javax.swing.UIManager.getUI(UIManager.java:860)


ich habe eine neue klasse JAbstractComboBox definiert, diese definiert

private static final String uiClassID = "SimpleComboBoxUI";

L&F verwende ich den standard metal L&F, im eigenen package habe ich neben den implementierungen auch die MetalSimpleComboBoxUI liegen. eine MultiSimpleComboBoxUI habe ich nicht.

* brauche ich die Multi*UI klasse?
* darf ich mein UI nicht in meinem package liegen haben?
* muss ich meine UI klasse irgendwo registrieren?

hätte eigentlich gegooglet, aber nix passendes gefunden.

/edit: noch ein paar anmerkungen was ich eigentlich will:
ich habe eine KOPIE einer JComboBox die KEINE liste öffnet - daher eigene UI implementierung erforderlich...
Bearbeitet von Bimminger am 15.01.2006, 12:37

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Ich schätze mal, dass das das wirft, weil
Zitat
The default implementation of this method throws an error, as it should never be invoked.
und dass du das definieren musst.

Seltsamerweise hatte ich das Problem aber nie, hab aber mit Swing auch noch nicht so viel zu tun gehabt :/

Bimminger

christoph-bimminger.at
Avatar
Registered: Nov 2001
Location: Linz
Posts: 684
hmm ich definiere das ui nicht explizit, that's right. aber ich implementiere (genauso wie in der JComboBox) setUI mit welchem das zugehörige UI zur runtime eingesetzt wird (ist ja vom verwendeten L&F abhängig).

und vor genau diesem setUI versucht er in UIManager.java:860 (jdk) das UI per name zu ermitteln. genau dieses ClassForName findet nichts, und das führt zu obigem Problem.

warum das class for name nix findet ist mir unklar - leider zeigt mir mein eclipse debugger (warum auch immer) in dieser klasse keine werte an (kann watchen was ich will...), in meinen klassen funktionierts.

edit: solved
hatte gedacht die zuordnung klasse-UI geschieht mit konvention "plaf.<l&f-name>.<L&F-name><ComponentUI>, war ein Irtum von mir. muss scheinbar entweder

a) mein eigenes L&F vom bestehenden L&F ableiten, um meine Komponente dem L&F beizubringen [see MotifLookAndFeel.initClassDefaults(UIDefaults)] oder
b) bei Anwendungsstart und jedem Layout-Wechsel meine Komponente am L&F registrieren [UIManager.put(F_uiClassID, F_fqcn);]

scheint da gibts keinen gscheiteren weg herum, wenn wer andere ideen hat bitte posten.
Bearbeitet von Bimminger am 15.01.2006, 12:36
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz