[Java lista] swing feliratok nagyítása
Andras Suller
suller.andras at gmail.com
2009. Jún. 23., K, 11:31:19 CEST
Szia,
Köszi, ez is jó ötlet.
De egyébként saját Look&Feel-t használ a program, így a legegyszerűbb
megoldás az volt, hogy a L&F-ben átírtam a fontok méretét. Szerencsére
így kód módosítás nélkül meg lehetett növelni a betűket (persze néhány
helyen egy kicsit szétcsúszott a layout, de ezt ki lehet bírni).
Üdv: psmith
2009/6/23 <istvan.ketler at lhsystems.com>:
> Szia,
>
> Szerintem ne foglalkozz a kulcsok neveivel. Az UIManagertől kérd el az UIDefaults-ot (ez odaadja mind a hármat), majd iterálj végig rajta, és ha a kapott elem instanceof Font, akkor növeld meg meg méretét.
>
> Valami ilyesmi (személy szerint nem akarok módosítani egy hashmap-et, miközben iterálok a kulcsain - egyébként sem akarok arról tudni, hogy hashmap, csak arról, hogy iterálhatók a kulcsok), csak persze newFont helyett a kapott fontot módosítsd mondjuk a font.deriveFont(float) hívással:
>
> public synchronized void setApplicationMainFont(final Font newFont) {
> UIDefaults defaults = UIManager.getDefaults();
> List<Object> keyList = new ArrayList<Object>();
> Enumeration<Object> keys = defaults.keys();
> while (keys.hasMoreElements()) {
> Object key = keys.nextElement();
> Object value = defaults.get(key);
> if ((value != null) && (value instanceof Font)) { // Yeah, I know. But hags do exist.
> keyList.add(key);
> }
> }
> for (Object key : keyList) {
> UIManager.put(key, null); // clear the developer default
> Font font = UIManager.getFont(key);
> if (font != null) {
> UIManager.put(key, new FontUIResource(newFont));
> }
> }
> SwingUtilities.invokeLater(new Runnable() {
>
> public void run() {
> SwingUtilities.updateComponentTreeUI(getBaseComponent());
> }
> });
> }
>
> A nullt azért teszi be, hogy a "developer defaults" értéket nullázza. Ezután a getFont visszatér a L&F defaulttal, vagy a system defaulttal. Ha egyik sincs, akkor az valami saját font volt. Persze dönthetsz úgy, hogy azt is megtartod (megnövelve vagy eredetiben). Nekem ilyenem nem lehet, ha mégis van, akkor az kidobandó.
>
> A getBaseComponent() a GUI root component-tel térjen vissza (JFrame, de ha több root window-d van, akkor mindegyikre meg kell csinálni). Ez főleg akkor fontos, ha a GUI már inicializálva van - viszont nincs garancia arra, hogy adott L&F esetén működni fog. Legjobb, ha megjelenítés előtt csinálod meg, de már az L&F betöltése után.
>
> Üdvözlettel,
>
> Ivan
További információk a(z) Javalist levelezőlistáról