ramccor / esmska

Automatically exported from code.google.com/p/esmska
0 stars 0 forks source link

LookAndFeel #125

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Zdravim a děkuji za skvělý program.

Mám návrhy: dalo by se při změně vzhledu aplikovat nový vzhled 
okamžitě, 
ušetřilo by to spoustu vypínání/spouštění programu při hledání toho 
"nejlepšího" vzhledu.

Při volbě vzhledu "meziplatformní" se nastaví Nimbus. Hledal jsem Metal a 
nenašel. Kouknul jsem do zdrojových kódů a našel jsem tam přepnutí 
defaultního Metalu na Nimbus. Proč? Někdo má rád klasický "java vzhled" 
proč mu ho upírat?

Original issue reported on code.google.com by knapek....@gmail.com on 23 Mar 2009 at 1:52

GoogleCodeExporter commented 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

GoogleCodeExporter commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
Ok. Kdyžtak dej vědět.

Original comment by rippe...@gmail.com on 23 Mar 2009 at 12:09

GoogleCodeExporter commented 9 years ago
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:

GoogleCodeExporter commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
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:

GoogleCodeExporter commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
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