Bimminger
christoph-bimminger.at
|
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
|
Ich schätze mal, dass das das wirft, weil 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
|
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
|