Mam przycisk J i chcę dodać do niego ikonę. Chciałbym używać czcionek opartych na FontAwesome, które zapewniają plik czcionki TrueType. Ikona, którą próbuję dodać, to ikona przycisku odtwarzania. Ikona przycisku odtwarzania w pliku css dla FontAwesome to \f04b
, którą uważam za przetłumaczoną na język \uf04b
w Javie.Dodaj ikony do JButton przy użyciu niestandardowej czcionki od znaków AwesomeFont i Unicode w Java Swing?
Oto jak ładuję czcionkę w konstruktorze klasy bazowej IconButton.
public class IconButton extends JButton {
public IconButton() {
try {
InputStream in = this.getClass().getResourceAsStream("/fontawesome-webfont.ttf");
Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, in);
Font ttfReal = ttfBase.deriveFont(Font.BOLD, 24);
setFont(ttfReal);
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
W klasie wykonawczej StartButton tak ustawiam tekst.
public class StartButton extends IconButton {
public StartButton() {
setText(String.valueOf('\u0f4b'));
setForeground(Color.BLACK);
}
}
To jest to, co otrzymuję. Nic.
Każda pomoc jest mile widziane.
EDYCJA: Zobacz odpowiedź poniżej.
To pierwszy kod Wold nie skompilować ('createFont' rzuca wyjątków, które nie mają złowione ani zadeklarowanej), i wygląda na straszny projekt dwóch pokazanych klas (1. pierwsza klasa mogłaby utworzyć czcionkę raz i cacheować ją jako statyczny atrybut 2. jeśli zdefiniowałaby konstruktora opartego na łańcuchu dla tekstu, wywołując super konstruktor, mogłaby avo id całkowicie drugiej klasy). Alternatywnie A., ponieważ 'IconButton' ustawia' Font' i 'StartButton' ustawia kolor pierwszego planu, używa standardowego' JButton' i podaje każdemu z nich metodę konfiguracji wyglądu. B. Użyj nowego PLAF lub dostosuj 'UIManager' –
Kod nie został wyciągnięty dosłownie z aplikacji w celu zmniejszenia szumów, ale dla kompletności sake zaktualizowałem go tak, aby zawierał próbę/catch. Dodam też, że zgadzam się, że powinien on raz stworzyć czcionkę. Dobry pomysł. Będę musiał sprawdzić PLAF i UIManger. –
* "Kod nie został wyciągnięty dosłownie z aplikacji" * Prawdopodobnie lepiej opisać go słowami lub pseudokodem (wyraźnie oznaczonym jako taki) niż kod Java w tym przypadku. Dobry telefon do aktualizacji. :) –