基本上,Swing JComponents可以使用2 2/3形式显示分数。我该如何画出最好的形式的分数,例如2⅔?



编辑



如我所见,我在JTable中只有一种方法JSpinner和一个TableColumnTableRow(也可以模拟普通的JtextField),其中TableRenderer可能是一些使用Html格式化的JTextComponent,在TableCellEdit事件中,TableEditor与普通的JFormattedTextField一起使用,

还有另一种方法,也可以用普通的J(Formatted)TextField吗?

最佳答案

反射(reflection)一下,Latin-1 SupplementNumber Forms之间的Unicode分数覆盖范围有限,并且fancy equations可能会过大。本示例使用HTML in Swing Components

附录:所示的方法非常适合呈现混合数字。为了进行编辑,可以在文本组件中添加key bindings+/,以进行计算器样式的输入。我已经使用 org.jscience.mathematics.number.Rational 对有理数进行建模,并且该parser可以用于评估有理表达式。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/** @see https://stackoverflow.com/questions/7448216 */
public class HTMLFractions extends JPanel {

    private static int N = 8;

    public HTMLFractions() {
        this.setLayout(new GridLayout(N, N, N, N));
        this.setBorder(BorderFactory.createEmptyBorder(N, N, N, N));
        for (int r = 0; r < N; r++) {
            for (int c = 0; c < N; c++) {
                this.add(create(r + N, r + 1, c + 2));
            }
        }
    }

    private JLabel create(int w, int n, int d) {
        StringBuilder sb = new StringBuilder();
        sb.append("<html><body>");
        sb.append(w);
        sb.append("<sup>");
        sb.append(n);
        sb.append("</sup>");
        sb.append("<font size=+1>/<font size=-1>");
        sb.append("<sub>");
        sb.append(d);
        sb.append("</sub>");
        sb.append("</html></body>");
        JLabel label = new JLabel(sb.toString(), JLabel.CENTER);
        label.setBorder(BorderFactory.createLineBorder(Color.lightGray));
        return label;
    }

    private void display() {
        JFrame f = new JFrame("HTMLFractions");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new HTMLFractions().display();
            }
        });
    }
}

关于java - 如何在Swing JComponents中呈现分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7448216/

10-12 00:27
查看更多