2015-12-20 3 views
0

Как можно сделать вывод в Java в Swing в JLabel со строкой, где есть символы с индексами и степенями? Например: вывод x^2 (x * x).Вывод Java, полномочий и индексов в UI

+0

Вы попробуйте использовать юникоды для персонажей. Вы можете найти таблицу шрифтов для шрифта, который вы используете, чтобы увидеть, есть ли у него эти символы. Возможно, вы сможете использовать надстрочные возможности HTML – MadProgrammer

ответ

5

Вы могли бы ...

Сделать использование HTML поддержки JLabel «s и использовать <sup> (верхний индекс), например ...

Superscript

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     add(new JLabel("<html>2<sup>*</sup>2"), gbc); 
     add(new JLabel("<html>2<sup>^</sup>2"), gbc); 
    } 

} 

Вы могли бы ...

Использовать поддержку юникода (при условии, что ваш шрифт поддерживает его)

Unicode

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     add(new JLabel("2\u00B2"), gbc); 
    } 

} 

Посмотрите Unicode character table для более предложений

7

Wild угадаю - вы хотите, чтобы дисплей выглядеть красиво. Хорошо тогда:

Swing Components может отображать (ограниченное) HTML. Так что это на самом деле работает:

JLabel label = new JLabel("<html>a<sup>2</sup> * x<sub>2</sub> + x<sub>3</sub>"); 
JOptionPane.showMessageDialog(null, label); 

создаст дисплей как

shown dialog

Использование

  • <sup> для надстрочного или
  • <sub> для подстрочного
4

Также рассмотрите AttributedString в своем собственном JComponent, проиллюстрированном here и here.

image

JFrame f = new JFrame("Test"); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.add(new JPanel() { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     String s = "ax [m/s2]"; 
     AttributedString as = new AttributedString(s); 
     as.addAttribute(TextAttribute.SIZE, 24, 0, 2); 
     as.addAttribute(TextAttribute.SIZE, 16, 3, 9); 
     as.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, 0, 2); 
     as.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB, 1, 2); 
     as.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 7, 8); 
     g.drawString(as.getIterator(), 12, 32); 
    } 
}); 
f.pack(); 
f.setLocationRelativeTo(null); 
f.setVisible(true); 
+0

Как предложено [здесь] (http://stackoverflow.com/q/23975076/230513), используйте 'TextLayout' для границ. – trashgod

Смежные вопросы