这是我在游戏中需要的文字:
Word Wrap Support given a bounding box
Vertical and Horizontal alignment given a bounding box
Run Code Online (Sandbox Code Playgroud)
现在,我一直在阅读有关如何使用TextLayout的内容,似乎可以自己编写所有内容,但我更愿意在更高层次上思考.我只想要一个带有这样签名的Label类:
public Label(String text, Alignment alignment, VAlignment vAlignment);
Run Code Online (Sandbox Code Playgroud)
有没有人知道一个开源(非gpl)库,使文本格式简单?
我正在使用Java和LWJGL制作OpenGL游戏.我编写了一个TextRenderer使用缓存的字形页面呈现文本的类.字形本身在Java2D中呈现为BufferedImages,并与字形测量一起打包到纹理页面中.TextRenderer使用缓存的信息将字符绘制为纹理四边形.
所有这一切都运作良好,除了一件事:缺少字距.当然,没有必要让文本看起来很好,但如果我可以访问字体字距信息,它会提高质量.
是否可以使用普通Java获取字距调整信息,以便可以跨Windows,Linux和MacOS X移植?回到我写的时候,TextRenderer我简单地环顾四周但却找不到这样的方式..
如果在纯Java中没有办法做到这一点,我正在考虑使用Freetype编写一个单独的工具.如其功能页面中所列:
FreeType 2提供了其他类似字体引擎通常无法提供的信息,如字距调整,字形名称,垂直度量等.
该工具会将常用字符的字距调整对存储到我的文本渲染器将加载并使用的文件中.所以如果你们没有提出更好的选择,这可能就是我要做的.:)
我正在使用java.awt.geom.Rectangle2D.Double类来生成一个矩形.我想生成一个填充颜色(比如绿色)并有边框(轮廓)的矩形.
现在问题是如果我打电话
g2.draw(new Rectangle2D.Double(....)); // g2 is an instance of Graphics2D
Run Code Online (Sandbox Code Playgroud)
然后它没有填充矩形,当我打电话
g2.fill(new Rectangle2D.Double(....)); // g2 is an instance of Graphics2D
Run Code Online (Sandbox Code Playgroud)
那么id不会生成边框.
将Point2D.Double x距离移近另一个Point2D.Double的最佳方法是什么?
编辑:尝试编辑,但所以进行维护.不,这不是功课
我需要将一个平面(A)移向跑道(C)的末端并将其指向正确的方向(角度a).
alt text http://img246.imageshack.us/img246/9707/planec.png
这是我到目前为止所拥有的,但它看起来很混乱,通常的做法是什么?
//coordinate = plane coordinate (Point2D.Double)
//Distance = max distance the plane can travel in this frame
Triangle triangle = new Triangle(coordinate, new Coordinate(coordinate.x, landingCoordinate.y), landingCoordinate);
double angle = 0;
//Above to the left
if (coordinate.x <= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
{
angle = triangle.getAngleC();
coordinate.rotate(angle, distance);
angle = (Math.PI-angle);
}
//Above to the right
else if (coordinate.x >= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
{
angle = triangle.getAngleC();
coordinate.rotate(Math.PI-angle, distance);
angle = …Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我如何在Java 2d中找到文本吗?
这是代码,它绘制了一列自然对齐的文本.
Font yFont = new Font("Arial", Font.BOLD, 13);
interval = 0;
g2d.setFont(yFont);
for (String l : binLabels) {
g2d.drawString(l, 0, (135 + interval));
interval = interval + 15;
}
Run Code Online (Sandbox Code Playgroud)
快把我逼疯了.谢谢你们
slothishtype
我正在开发一个应用程序,它使用Java 2D绘制矩阵 - 它可以变得非常大,例如30000 x 30000像素.此时我用BufferedImage进行了一些实验,但是创建如此庞大的BufferedImage会导致内存不足异常,即使在扩大堆时也是如此.现在我正在考虑将图像分成几个图像/区域,当我在某个区域完成时,将其写入磁盘并创建一个新区域/ BufferedImage并继续绘制.我对其他人如何处理这个问题感兴趣.我已经离开Java一段时间了,所以欢迎任何具体的例子.
我正在使用桌面Java应用程序,并且已经使用JDK 6通过IDE进行开发.我使用渲染提示VALUE_FRACTIONALMETRICS_ON和其他提示来更好地渲染JLabel中的文本.这些提示在JVM 1.6上运行得非常漂亮,但我最近注意到,VALUE_FRACTIONALMETRICS_ON当我使用JRE运行应用程序时,它似乎完全忽略了1.7我在这里做错了什么让Java 7忽略了这些提示?
lblDate = new ATimeLabel(ATimeLabel.DATE_LETTERS) {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
super.paintComponent(g2d);
}
};
Run Code Online (Sandbox Code Playgroud)
FRACTIONALMETRICS对文本具有最明显的视觉效果,因此让我的工作就是我想要做的.
这是一个屏幕截图比较,当我从我的IDE(左)运行应用程序时使用Java 6,当我双击Jar文件时,它自己(右)使用我的系统JRE,Java 7.(我还临时添加红色边框以显示paint方法确实有效)
任何帮助将非常感谢.
对于Swing组件Java 1.7(Windows),对文本的抗锯齿渲染提示似乎已经破坏.设置 KEY_ANTIALIASING和/或KEY_TEXT_ANTIALIASING已不影响显示器JLabel,JEditorPane等-但实际上我需要在我的项目不同的设置.
您可以在此截图中比较Java 1.6(jdk1.6.0_45)和Java 1.7(jdk1.7.0_40)中的不同行为,使用下面的测试程序生成:

左边是Java 1.6,右边是Java 1.7.第一列是涂上的Graphics2D.drawString,第二列是涂上的JLabel.在Java 1.6中,渲染提示会影响JLabel显示,而在Java 1.7中,所有JLabel都会呈现相同的内容(除了具有小数度量标准的JLabel).
你知道我如何让抗锯齿提示影响Java 1.7中的Swing组件吗?
测试程序:
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class AntialiasMain extends JFrame {
public AntialiasMain() {
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.add(new AntialiasLabel("default", null));
HashMap<Key, Object> hints = new HashMap<Key, Object>();
hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
panel.add(new AntialiasLabel("AA off", hints));
hints = new HashMap<Key, Object>();
hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
panel.add(new AntialiasLabel("AA on", hints));
hints = …Run Code Online (Sandbox Code Playgroud) 我想创建一个具有自定义形状和透明度的对话框,认为信息气泡指向某个组件.
为此,我添加了JPanel一个JDialog并覆盖paintComponent(Graphics)面板的方法.面板本身包含常规JLabels和JButtons.工作正常,但只要我Graphics2D.setClip(Shape)在面板中使用绘制代码,组件就会被背景透支.如果我没有设置剪辑(对于一个完全新鲜的Graphics2D对象,不能少),一切正常.这对我来说非常令人费解,我不知道我能做些什么来解决它.
PS:我无法使用setShape(Shape),JDialog因为那里没有抗锯齿功能.PPS:实际的用例是绘制一个大的背景图像,必须在信息气泡形状上切除.
当您多次鼠标悬停在右上角的"x"时,以下SSCCE会演示此问题.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.Polygon;
import java.awt.Shape;
public class Java2DTransparencySSCE extends JDialog {
JPanel panel;
private JButton close;
private JLabel headline;
private JLabel mainText;
public Java2DTransparencySSCE() { …Run Code Online (Sandbox Code Playgroud)