Đối với các ứng dụng swing, cài đặt phông chữ mặc định cho các thành phần trong chủ đề hiện tại và có thể được lấy ra sử dụng UIManager:java đu tối thiểu (hoặc phạm vi cho) kích thước phông chữ cho các ứng dụng khác
public class JavaTesting {
public static void main(String[] args) {
System.out.println(UIManager.get("Label.font"));
}
}
Điều này có thể được điều chỉnh trong JAVA_HOME/lib/swing.properties cho hàng loạt các ứng dụng với ví dụ:
swing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel
hoặc đặt ở dòng lệnh với:
java -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp
Hoặc bản thân ứng dụng ghi nhớ giao diện của nó và có giá trị này được lưu ở đâu đó trong cấu hình (tệp). Nó hoạt động, bởi vì ứng dụng có thể thiết lập giao diện cho chính nó, ví dụ:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
bài này có vẻ tốt đẹp, nhưng các ứng dụng cần thường phông chữ nhỏ hơn (ví dụ như không quan trọng nhắn thanh trạng thái cho Label) hoặc phông chữ lớn hơn (Dán nhãn với một số tiêu đề). Có cách nào được khuyến nghị cho việc này không? Là một người sử dụng của màn hình mật độ cao Tôi đã phải bỏ rất nhiều ứng dụng java, mã sử dụng như thế này - mã nguồn sao chép từ sóc sql:
Font tmp = (Font)UIManager.get("Label.font");
if (tmp != null) {
Font font = tmp.deriveFont(10.0f);
_statusBarFontInfo = new FontInfo(font);
}
mã ví dụ này làm cho thanh trạng thái hoàn toàn không đọc được, nhưng hầu hết các thành phần được điều chỉnh theo phông chữ mới, lớn hơn.
Đối với việc tạo ra ứng dụng riêng của tôi, tôi có thể sử dụng một số tỷ lệ (ví dụ 50% đến 150% phông chữ chủ đề), nhưng hardcoding 0,50-1,50 phạm vi trông như một habbit xấu mã hóa là tốt. Và nó không khắc phục được sự cố với các ứng dụng mà tôi không có mã nguồn. Điều này thuộc về chủ đề/L & F (Hãy xem & Cảm giác, giao diện). Ví dụ:
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);
Điều đáng hỏi trước khi tôi thử một số phần mềm xấu xí như các thành phần tùy chỉnh thay thế các giá trị mặc định swing hoặc điều chỉnh Graphics2D.setFont hoặc bất kỳ nội dung đáng sợ nào khác. :-)
Chỉnh sửa: điều duy nhất tồn tại, là biến thể kích thước, chỉ được hỗ trợ bởi chủ đề Nimbus. Giá trị được phép là "nhỏ", "nhỏ", "thông thường", "lớn". Ví dụ:
JComponent mini = new JButton("mini");
mini.putClientProperty("JComponent.sizeVariant", "mini");
Tuy nhiên, nhìn vào mã nguồn cho chủ đề Nimbus, nó không thể chỉ đơn giản là điều chỉnh các giá trị (ví dụ quy mô đến 150% cho "lớn"), nó thực sự mã hóa cứng!
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;
Giá trị này có thể được chỉ thay đổi nội dung bởi người dùng rất tiên tiến (ví dụ sửa hồ bơi liên tục trong JAVA_HOME/lib/rt.jar với chương trình gọi là "rej") - tôi đã cố gắng nó, và nó hoạt động, NHƯNG nó doesn 't làm việc luôn, bởi vì họ thực sự mã hóa cứng (!!) các hằng số ở một số nơi (là thế này chất lượng thực sự tốt nhất - thư viện tiêu chuẩn?), ví dụ:
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);
}
Tóm lại: không có, Java nhìn và cảm thấy không ủng hộ điều đó bây giờ. Tôi đề xuất sử dụng tỷ lệ, ví dụ: 0,7 - 1.3 kích thước phông chữ mặc định.
JLabel smallLabel = new JLabel("some text");
smallLabel.setFont(smallLabel.getFont().deriveFont(0.8f * smallLabel.getFont().getSize2D()));
[câu hỏi hay nhất +1] (http://stackoverflow.com/q/9958004/714968) – mKorbel
Thẻ đã xóa "Nimbus". Điều này không liên quan gì tới chủ đề "Nimbus", nó chỉ là một ví dụ. Nó liên quan đến tất cả các chủ đề. – peenut
trong Swing là Look and Feel, không phải chủ đề – mKorbel