java - 如何在 Swing JComponents 中渲染分数

标签 java swing fractions jspinner jformattedtextfield

基本上,Swing JComponents 能够以 2 2/3 这种形式显示分数形式的数字。我怎样才能以最好的形式绘制分数,例如 2⅔?

.

编辑

.

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

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

最佳答案

经过深思熟虑,Latin-1 SupplementNumber Forms 中的 Unicode 片段提供的覆盖范围有限,而 fancy equations 可能有点矫枉过正。这个例子使用 HTML in Swing Components

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

HTMLFractions

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/

相关文章:

math - 分数长度

java - 将值传递给java中的分数类

java - 从 json 响应创建 java 模型

Java 映射,从值到键

java - JScrollPane.setviewportview 与 JScrollPane.add 之间的区别

Java 空布局导致空白屏幕

java - 使用 setMinimumFractionDigits Java 计算分数

java - switch语句错误

java - Spring bean 如何检测它自己是否已包装在 AOP 代理中?

java - GUI 添加了组件,但显示时显示空白