基本上,Swing JComponents 能够以 2 2/3
这种形式显示分数形式的数字。我怎样才能以最好的形式绘制分数,例如 2⅔?
.
编辑
.
正如所见,我在 JSpinner
中只有一种方法 JTable
有一个 TableColumn
和 TableRow
(可以模拟plain JtextField
也是),其中 TableRenderer
可以是一些 JTextComponent
通过使用 Html 和 TableCellEdit
事件格式化 TableEditor
切换到普通的 JFormattedTextField
,
还有另一种方法吗,是否也可以使用普通的 J(Formatted)TextField
???
最佳答案
经过深思熟虑,Latin-1 Supplement 和 Number 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/