28. august 2002 - 16:57Der er
2 kommentarer og 1 løsning
Swing-xpert: Flerniveau JPopupMenu i JComboBox
Jeg har en JComboBox hvorfra jeg gerne vil vælge en "Kategori". "kategorierne" ligger i en træstruktur, og i ekspanderet tilstand er denne for lang at scrolle igennem. Derfor vil jeg gerne lave det med en JPopupMenu. Popupmenuen er sådan set allerede lavet ud fra DB data, men jeg har lidt problemer med at få den vist fra comboboxen med en fornuftig funktionalitet. Med dette mener jeg som minimum: 1) Når popup'en åbner skal den kunne vise den aktuelle kategori som selected (og dermed også expandere den nødvendige undermenu. 2) Man skal i et eller andet omfang kunne keyboardnavigere (som i en normal menu). 3) Når brugeren har valgt et element, skal comboboxen vise en streng genereret ud fra stien til elementet, f.eks. "Programmering > Java" eller "Programmering > ... > Swing" hvis der ikke er plads. (men denne del skal jeg nu nok få fikset selv).
Jeg har rodet en del med problemet og prøvet med combobox.setUI(minNedarvedeComboPopup);
Jeg har også prøvet bare at åbne min egen JPopupMenu ved MouseClicked på Combo'en, men ingen steder får jeg et fornuftigt resultat.
Jeg er nået til det punkt hvor jeg er overbevist om at jeg har overset noget indlysende. Default implementeringen af JCombBox bruger JPopupMenu, så det burde da være let at skifte den ud.
Er der nogen der har en ordentlig løsning på dette problem? (helst en jeg ikke allerede har prøvet :-)
Omend det kaldes en popup i combobox regi, er den en smule forskellig i forhold til en popup menu. De to kan godt lægges sammen omend det bliver frygteligt besværligt.
Jeg havde selv problemet engang, og lavede en klasse til formålet. Den løser 1 og 2, og jeg har extracted noget omkring 3 i private String render(MenuElement[]), som kan give dig et hint om resten.Det ved jeg, at du kan fikse selv :-)
Den sender change events når der bliver highlighted et menupunkt, og når man taster enter i tekstfeltet, og ved at sammenligne indholdet med den givne selection vil man formodentlig kunne afgøre, om det er noget brugeren selv har skrevet.
Jeg har klippet javadoc væk, ellers er resten her:
Hej Niels. Tak for et godt og grundigt svar på det allerførste eksperten spørgsmål jeg selv har stillet. Jeg har virkelig været forundret over at der ikke var kommet en eneste kommentar på mit spørgsmål, men det har du i den grad lavet om på :-) Den løsning havde jeg slet ikke overvejet. Og det virker jo smukt. Du har sandlig fortjent dine point. :-) Hilsen Jan
Der er ikke så mange der kender swing i detaljer.. :-)
Det var også kun fordi titlen startede med swing-xprt, at jeg blev nysgerrig. Jeg har ellers ikke svaret et eneste spørgsmål i 2002.
Og mine 2 hade-componenter i swing er netop jcombobox og jpopupmenu, så dem har jeg patched et par gange.
Hils omkring dig.!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.