mKo*_*bel 16 java swing jspinner fractions jformattedtextfield
基本上Swing JComponents能够以这种形式显示分数2 2/3.如何以最好的形式绘制分数,例如2⅔?
.
编辑
.
因为看到我只有一个办法JTable里面JSpinner有一个TableColumn和TableRow(可能普通的模拟JtextField太),其中TableRenderer可能会有一些的JTextComponent格式化使用HTML和TableCellEdit事件TableEditor,以SWITH到平原JFormattedTextField,
还有另一种方式,是否有可能与平原J(Formatted)TextField???
tra*_*god 23
经过反思,Latin-1 Supplement和Number Forms中的 Unicode分数提供有限的覆盖范围,并且花哨的方程式可能过度.此示例在Swing组件中使用HTML.
附录:显示的方法非常适合渲染混合数字.对于编辑键绑定到+并/可以添加在文本组件计算器式的输入.我习惯于org.jscience.mathematics.number.Rational对有理数进行建模,这个解析器可以用来评估有理表达式.

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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
使用Java2D API.这是奥莱利的优秀书籍.
1-使用您喜欢的字体.2-将您需要的字形(例如"2""/"和"3")转换为Java2D形状.3-使用Java @ d方法缩放并将形状放在一起
4-这部分取决于组件.我认为很多组件都采用某种图像而不是文本.将您的形状转换为适合您组件的任何形状.
5-如果做得好,这应该看起来很专业:)
来吧给我50!
=============
非常感谢你们的观点.以下是如何执行第一步的示例.它将展示如何enter code here从您选择的字体中获取Shape 的实例.
一旦你拥有了Shape你可以使用Graphics2D来创建你想要的图像(缩放,撰写等).所有的swing组件都不同,但都有图形上下文.使用图形内容,您可以在任何Swing组件上绘制.您还可以制作透明图层,并将传输JPanel粘贴到您想要的任何内容上.如果您只是想在标签上显示一个简单的分数.如果你有一些文字处理器,那很难.
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
public class Utils {
public static Shape generateShapeFromText(Font font, char ch) {
return generateShapeFromText(font, String.valueOf(ch));
}
public static Shape generateShapeFromText(Font font, String string) {
BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img.createGraphics();
try {
GlyphVector vect = font.createGlyphVector(g2.getFontRenderContext(), string);
Shape shape = vect.getOutline(0f, (float) -vect.getVisualBounds().getY());
return shape;
} finally {
g2.dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |