2012-12-26 28 views
6

Do zastosowań skrzydłowych, domyślne ustawienia czcionki dla komponentów są w tym temacie i mogą być pobierane za pomocą UIManager:Java Swing minimalny (lub zakres) wielkość czcionki dla innych aplikacji

public class JavaTesting { 
    public static void main(String[] args) { 
     System.out.println(UIManager.get("Label.font")); 
    } 
} 

To może być regulowana w JAVA_HOME/lib/swing.properties do różnych zastosowań, na przykład z:

swing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel 

lub ustawiony w linii z poleceń:

java -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp 

Lub sama aplikacja zapamiętuje swój wygląd i ma tę wartość przechowywaną gdzieś w konfiguracji (pliku). To działa, ponieważ aplikacja może ustawić wygląd i dla siebie, np:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");  

To wszystko wygląda ładnie, ale aplikacje muszą często mniejszych czcionek (np nieistotne wiadomość pasek stanu na etykiecie) lub większych czcionek (Etykieta z pewnym nagłówkiem). Czy jest jakiś zalecany sposób na to? Jako użytkownik monitora o wysokiej gęstości musiałem odrzucić wiele aplikacji java, że ​​należy użyć kodu jak ten - źródło kod skopiowany z wiewiórki SQL:

Font tmp = (Font)UIManager.get("Label.font"); 
if (tmp != null) { 
     Font font = tmp.deriveFont(10.0f); 
     _statusBarFontInfo = new FontInfo(font); 
} 

Ten przykładowy kod sprawia, pasek stanu całkowicie nieczytelny, ale większość komponentów są dostosowane do nowej, większej czcionki.

Do tworzenia mój własny wniosek, że mogę korzystać z niektórych stosunek (na przykład 50% do 150% czcionki motywu), ale hardcoding 0,50 - 1,50 Zakres wygląda jako złe kodowania habbit również. I nie rozwiązuje problemu z aplikacjami, dla których nie mam kodu źródłowego. To należy do tematu/L & F (Look & Poczuj, Look and Feel). Przykład:

FontUIResource Label_font_resource = (FontUIResource)javax.swing.UIManager.get("Label.font"); 
Font Label_font = Label_font_resource; 
Font Label_font_bigger = Label_font.deriveFont(Label_font.getSize2D() * 1.5f); 

Warto pytać przed I spróbować brzydkie hacki jak niestandardowych składników zastępujących te domyślne huśtawka lub korekt Graphics2D.setFont lub jakiegokolwiek innego przerażające rzeczy. :-)

Edycja: jedyne co istnieje, to wariant rozmiaru, który jest obsługiwany tylko przez motyw Nimbus. Dozwolone wartości to "mini", "small", "regular", "large". Przykład:

JComponent mini = new JButton("mini"); 
mini.putClientProperty("JComponent.sizeVariant", "mini"); 

Jednak patrząc na kod źródłowy dla Nimbus tematu, to nie jest możliwe, aby po prostu dostosować te wartości (np skala do 150% w przypadku „dużych”), to rzeczywiście zakodowane!

package javax.swing.plaf.nimbus; 

public final class NimbusStyle extends SynthStyle 
{ 
    public static final String LARGE_KEY = "large"; 
    public static final String SMALL_KEY = "small"; 
    public static final String MINI_KEY = "mini"; 
    public static final double LARGE_SCALE = 1.15D; 
    public static final double SMALL_SCALE = 0.857D; 
    public static final double MINI_SCALE = 0.714D; 

Wartość ta może być edytowane tylko przez bardzo zaawansowanego użytkownika (na przykład edytować stałą basen w JAVA_HOME/lib/rt.jar z programu o nazwie „Rej”) - próbowałem go, i to działa, ale to nie robi „t zawsze działa, bo rzeczywiście zakodowane (!!) na stałe w kilku miejscach (to jest naprawdę najwyższej jakości - standardowe biblioteki?), na przykład:

if ("large".equals(str)) 
{ 
    this.scrollBarWidth = (int)(this.scrollBarWidth * 1.15D); 
    this.incrGap = (int)(this.incrGap * 1.15D); 
    this.decrGap = (int)(this.decrGap * 1.15D); 
} 

Konkluzja: nie, wygląd Java i czuć, nie obsługuje tego na razie. Proponuję użyć współczynników, np. 0,7 - 1.3 domyślnego rozmiaru czcionki.

JLabel smallLabel = new JLabel("some text"); 
smallLabel.setFont(smallLabel.getFont().deriveFont(0.8f * smallLabel.getFont().getSize2D())); 
+0

[ładny pytanie +1] (http://stackoverflow.com/q/9958004/714968) – mKorbel

+0

Usunięto tag "Nimbus". To nie ma nic wspólnego z tematem "Nimbus", to był tylko przykład. Dotyczy WSZYSTKICH tematów. – peenut

+0

w Swing są Look and Feel, nie motywy – mKorbel

Odpowiedz

1

Zamiast zmieniać Font, Nimbus ma sizeVariant dla mini, małych, zwykłych i dużych komponentów. Ten artykuł zawiera więcej przykładów: Resizing a Component.

myButton.putClientProperty("JComponent.sizeVariant", "mini"); 
0

Co robiłem w mojej aplikacji Swing to obejmują klasę czcionki. Każdy inny komponent Swing, który wymaga czcionki, wywołuje klasę Font.

import java.awt.Font; 

public class MinesweeperFont { 

    protected static final String FONT_NAME = "Comic Sans MS"; 

    public static Font getBoldFont(int pointSize) { 
     return new Font(FONT_NAME, Font.BOLD, pointSize); 
    } 

} 

Teraz w tym przypadku potrzebowałem tylko jednego rodzaju czcionki. Pozwoliłem, aby aplikacja wybrała rozmiar czcionki.

Możesz zdefiniować metodę dla każdej wielkości czcionki, którą chcesz, prawdopodobnie nazywając ją małą, średnią i dużą, abyś mógł później zmienić metody, aby użyć innego rozmiaru lub typu punktu, jeśli chcesz.

Ponieważ cała aplikacja wywołuje te statyczne metody czcionek, wystarczy dokonać zmian czcionek w jednym miejscu.

+0

Opisuję twoje rozwiązanie w moim pytaniu jako niezadowalające: patrz część pogrubiona "proporcja". Pytam, czy można to zrobić LEPSZE - aby współdzielić ustawienia między aplikacjami Java (np. "Look and feel") i/lub jak je naprawić dla istniejących aplikacji Java, które używają bezwzględnego rozmiaru czcionki, a nie proporcjonalności. – peenut