Closed GoogleCodeExporter closed 9 years ago
Změna LaF bez restartu by byla fajn, ale nepovedlo se mi to implementovat.
Často tam
dojde k nějakým problémům, u některých komponent vyskakují při
použití výjimky, atd.
Pokud víš, jak na to, rád přijmu patch.
Co se týká vzhledu Metal, jsi prvním člověkem, kdo říká, že se mu
líbí. Většina lidí
(včetně mě) ho považuje za příšerný, a proto nahrazení Nimbusem (pokud
je podporován)
je jasná volba. Nebo spíš naopak, pokud není dostupný Nimbus, tak se jako
poslední
záchrana použije Metal. I Sun nyní doporučuje Nimbus jako výchozí
meziplatformní
vzhled, i když kvůli kompatibilitě tam zůstává Metal.
Veskrze mám tendence počet dostupných vzhledů ještě snížit, nikoliv
zvyšovat, protože
je to strašně náročné na údržbu. Veškeré vlastně obarvené prvky je
nutné testovat na
všech LaF, mnoho LaF má chyby, které je nutné obcházet, je nutné to
testovat na Sun
Java i OpenJDK, atd atd. Takže přidávat ještě explicitní Metal, když je
fakt hnusnej,
nebo nějakej jinej, se mi vážně moc nechce.
Mohl bych udělat volbu na příkazovém řádku, aby si mohli lidé nastavit
libovolný
vlastní vzhled, to je fakt. Otázkou je, kolik lidí by to využilo, jestli to
stojí za
tu námahu. Asi moc ne, protože ti zkušení si stejně mohou překrýt
meziplatformní nebo
systémovej vzhled svým vlastním na úrovni JVM.
Original comment by rippe...@gmail.com
on 23 Mar 2009 at 11:05
Samozřejmě přidávání dalších vzhledů mě ani na okamžik nenapadlo.
Pokusím se podívat
na ten live LaF change, ale já jsem člověk línej, mám školu atd. takže
se na mě
nespoléhej.
Original comment by knapek....@gmail.com
on 23 Mar 2009 at 11:57
Ok. Kdyžtak dej vědět.
Original comment by rippe...@gmail.com
on 23 Mar 2009 at 12:09
Ahoj, tak dávám vědět. Napsal jsem třídu, která přidá do programu
menu, ze kterého si lze
vybírat LaF (zabudované, Substance a JGoodies) a to bez restartu aplikace.
Použití: Přidej moji třídu do nějakého balíčku programu, do nějakého
okna přidej menu
pomocí addJMenuBar(LaFChanger.createJMenu()), o všechno ostatní se už
třída postará sama.
V classpath programu nemusí být knihovny obsahující skiny Substance a
JGoodies, třída si
je sama načte, jen pokud jsou přítomny.
Omezení:
- Takto lze vytvořit pouze jedno menu (nezkoušel jsem víc, taky k čemu,
že?).
- Přepnutí do/z Substance trvá trochu déle, kvůli přepnutí
vykreslování vlastního záhlaví
oken, všechna viditelná okna na chvíli zmizí, pokud je v aplikaci jenom
jedno okno, může
se stát, že se VM vypne (podle dokumentace), ale mě se to zatím nestalo.
Teď mě napadlo
zobrazit při přepínání LaF zaneprázdněný kursor (přesípací hodiny
apod).
- V programu Esmska se po přepnutí vzhledu rozsype pole pro zadávání
textu, to se možná dá
opravit pomocí nastavení preferovaných/minimálních rozměrů toho pole (ta
třída volá pro
každé okno metodu pack()).
- LaF doporučuji měnit pouze pomocí téhle třídy, jinak se může stát,
že v menu zůstane
viset nabídka "tučný metal?".
- Všechny try...catch v té třídě vypisují chybové hlášení na stderr,
i když to může být
zbytečné.
- Lze zkompilovat a spustit pomocí Javy 1.5, ale Substance nebude fungovat.
Zdrojový kód sem dávám volně k dispozici, kdokoli si jej může stáhnuot,
používat, a hlavně
upravovat (je to hrozná splácanina) bez omezení. Jestli jej někdo
vylepší, pošlete mi jej
prosím na mailto:knapek.mar@gmail.com
Original comment by knapek....@gmail.com
on 22 Sep 2009 at 3:17
Attachments:
A ta metoda addJMenuBar(JMenu) ma být dostupná na které že to třídě?
Nikde to nevidím.
Original comment by kamil.paral
on 24 Sep 2009 at 9:25
A, to jsem špatně napsal, mělo to být myšlený tak, že když odněkud z
kódu vidíš
nějaké okno (JFrame), tak si vytáhneš jeho JMenuBar (pokud ho už má) a do
něj přidáš
jedno menu (LaFChanger.createJMenu()) a to je všechno.
Příklad:
JFrame fr = new JFrame();
JMenuBar mbar = new JMenuBar();
...
vytvoření menu aplikace
...
mbar.add(LaFChanger.createJMenu());
fr.addJMenuBar(mbar);
Original comment by knapek....@gmail.com
on 25 Sep 2009 at 9:13
Attachments:
No, oceňuji úsilí, které jsi tomu věnoval, ale moc se mi to začleňovat
nechce. Já
samozřejmě umím zavolat updateComponentsTreeUI() taky. Problém je ta spousta
výjimečných stavů, ke kterým může dojít. Například když jsem měl
defaultní Substance
a změnil pomocí tvého menu na Metal, tak mi zmizly ze seznamu všechny
kontakty
(kreslily se neviditelně). To stejné ve vysouvací nabídce dostupných bran.
Příčinu
tuším, ale dalo by mi spoustu práce to u všech seznamů ošetřit. Dále mi
po chvilce
hraní vypadla výjimka z EDT vlákna. Na vině může být Substance, ale
jednoduše to může
způsobovat hromadu problémů, které nebudu schopen řešit. A risk se mi zde
zdá mnohem
vyšší než zisk. Takže díky, ale tohle bych kvůli zmíněným problémům
nejraději nechal
tak jak je.
Vypadá to ale, že v Javě umíš dělat dobře, pokud by ses chtěl podílet
na vývoji
programu, budu velmi rád. Návrhů na zlepšení máme v zásobě dost :)
Ještě taková malá rada, pokud budeš příště posílat patch do
libovolného opensource
projektu, tak zdrojáky zásadně v angličtině, jak proměnné, tak
komentáře.
Original comment by kamil.paral
on 25 Sep 2009 at 9:32
OK, tohle jsem stejně dělal pro sebe, můžu to totiž jednoduše vložit do
libovolné
aplikace.
Děkuji za pochvalu, dříve jsem psal v Delphi, pak jsem objevil Javu a ta mě
nadchla,
pro mě je to asi nejlepší jazyk (ještě jsem nezkoušel C#), jak zpětně
koukám na
Delphi, vůbec si nedokážu představit jak jsem v tom vůbec mohl psát.
Co se týče spolupráce, jsem dost nespolehlivý. Kdyžtak mrknu na nějaké
problémy a
když už budu mít hotovo, tak se ozvu (ne předem, to by ses nemusel vůbec
dočkat).
Original comment by knapek....@gmail.com
on 25 Sep 2009 at 10:13
No, práci je vhodné konzultovat. Spíš než ozvat se "až bude hotovo" mi
můžeš poslat
mail nebo si říct o jabber a můžem to probrat.
Original comment by kamil.paral
on 25 Sep 2009 at 11:31
Original issue reported on code.google.com by
knapek....@gmail.com
on 23 Mar 2009 at 1:52