Die Standardschrift in Look-and-Feel (NIMBUS) verhindert die Handhabung von Nicht-Latin-UTF-8-Zeichen in Java Swing
Posted: 10 Apr 2025, 07:49
Ich habe kürzlich mein Desktop -Betriebssystem auf Ubuntu 24.04 aktualisiert, das eine neue Standardschrift hat. Ich möchte dies in einen anderen ändern, da der neue zu kondensiert ist und im Schwung nicht richtig gegen Alias zu sein scheint. Emoji. Es scheint etwas zu fehlen, wenn es versucht, diese Zeichen zu bewältigen, aber nur, wenn die Schrift überschrieben wird. Wenn Sie den Nimbus laf as-is-is (noto sans font on my System) lassen, funktioniert einwandfrei. Wenn Sie jedoch den Standard mit derselben Schriftart, Noto Sans, außer Kraft setzen, bricht es auch. Es gibt also einen gewissen Unterschied in der Art und Weise, wie es Nicht-Latin-Zeichen behandelt, wenn Sie eine Standard-Überschreibung angeben.
Code: Select all
public class LafStyle extends JFrame {
/**
* Constructor.
*/
public LafStyle() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
getContentPane().add(createGui());
setMinimumSize(new Dimension(480, 360));
pack();
setVisible(true);
}
private JPanel createGui() {
final JPanel panel = new JPanel(new BorderLayout());
final JLabel lblText = new JLabel("AbcD - 度解析");
panel.add(lblText, BorderLayout.CENTER);
panel.add(new JButton("Close"), BorderLayout.SOUTH);
return panel;
}
/**
* @param args
*/
public static void main(final String[] args) {
// load font
Font font = null;
// font = new Font("Noto Sans", Font.PLAIN, 20);
font = new Font("DejaVu Sans", Font.PLAIN, 20);
// set laf
final NimbusLookAndFeel laf = new NimbusLookAndFeel();
if (font != null) {
laf.getDefaults().put("defaultFont", new FontUIResource(font));
}
try {
UIManager.setLookAndFeel(laf);
}
catch (final UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
new LafStyle();
}
}