Comment afficher "sigma-hat" en utilisant Unicode ou toute autre alternative en Java? (J'ai une solution partielle)


J'essaie de produire un symbole sigma-hat (pour l'écart type de l'échantillon).

Sur un système Windows 7, le code suivant produit un JLabel avec un chapeau sigma mal aligné:

JLabel sigmaHat = new JLabel("\u03C3\u0302");

Et cela ressemble à ceci:

Http://i.imgur.com/z4Nowwm.jpg

Est-ce que j'utilise le mauvais caractère de combinaison ou l'Unicode pour sigma-hat est-il cassé? Aussi, est-il possible de produire un symbole pour la variance de l'échantillon (sigma-chapeau-carré)?

Author: Peter Mortensen, 2014-04-19

2 answers

Utiliser U+0302 COMBINER l'ACCENT CIRCONFLEXE après le caractère sigma est la bonne façon. En Unicode, une marque de combinaison apparaît après le caractère de base dans le flux de données. Et il n'y a pas d'autre marque de combinaison qui pourrait être utilisée à la place.

Cependant, le résultat dépend de la police(s) et du moteur de rendu. Les échecs sont courants. Test ici: σ. (N'a pas l'air bon.) Essayer différentes polices, lorsque cela est possible, peut aider. Mais en général, des notations comme celle-ci sont généralement écrit à l'aide d'éditeurs d'équations, de LaTeX ou d'autres outils qui fonctionnent au-dessus du niveau du texte brut.

 3
Author: Jukka K. Korpela, 2014-04-19 06:29:21

, par curiosité, j'ai écrit un test:

import javax.swing.*;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.EventQueue;

public class FontCheck{
    final static String string = "\u03C3\u0302";
    public static void main(String[] args){

    EventQueue.invokeLater(()->{
        JFrame frame = new JFrame("font check!");
        JPanel content = new JPanel();
        content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));
        content.add(new JLabel(string));
        String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
        for(String font: fonts){
            JLabel label = new JLabel(font + " : " + string);
            label.setFont(new Font(font, Font.PLAIN, 12));
            content.add(label);
        }
        frame.setContentPane(new JScrollPane(content));
        frame.setSize(400, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        });
    }
}

Qui montre toutes les polices disponibles, et la première est la police par défaut. (Qui fonctionne très bien pour moi.) capture d'écran de jframe avec étiquettes

 2
Author: matt, 2016-02-17 06:44:42