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

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/solved_java_eigene_swing_componente_eigene_ui_klas_156470/page_1 - zur Vollversion wechseln!


Bimminger schrieb am 14.01.2006 um 16:07

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...


gue schrieb am 14.01.2006 um 17:49

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 schrieb am 15.01.2006 um 11:41

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025