基本上,Swing JComponents可以使用2 2/3
形式显示分数。我该如何画出最好的形式的分数,例如2⅔?
。
编辑
。
如我所见,我在JTable
中只有一种方法JSpinner
和一个TableColumn
和TableRow
(也可以模拟普通的JtextField
),其中TableRenderer
可能是一些使用Html格式化的JTextComponent
,在TableCellEdit
事件中,TableEditor
与普通的JFormattedTextField
一起使用,
还有另一种方法,也可以用普通的J(Formatted)TextField
吗?
最佳答案
反射(reflection)一下,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/