Java将文本字符串添加到矩形2D
我有一些长方形。给定一个矩形,声明并定义为:Java将文本字符串添加到矩形2D,java,string,Java,String,我有一些长方形。给定一个矩形,声明并定义为: Rectangle2D rec = new Rectangle2D.Double(50, 50, 50, 50) 是否可以在此矩形内添加文本字符串? 谢谢您可以在矩形的边界内绘制字符串 Graphics g = ... ... ... String yourString = ... ... ... g.drawString(yourString, rec.getX(), rec.getY()); 使用可能对你有用。不要尝试将字符串装入预定义的矩形
Rectangle2D rec = new Rectangle2D.Double(50, 50, 50, 50)
是否可以在此矩形内添加文本字符串?
谢谢您可以在矩形的边界内绘制字符串
Graphics g = ...
...
...
String yourString = ...
...
...
g.drawString(yourString, rec.getX(), rec.getY());
使用可能对你有用。
不要尝试将字符串装入预定义的矩形,而是考虑使用以找到字符串的边界。
getStringBounds()
方法如下图所示
附录:一旦你知道了边界,就可以更容易地将字符串放在一个更大的矩形中居中,或者将其修剪到合适的位置。通常用于表示省略
您可以使用以下代码通过简单的调整大小方法完成此操作:
package org.tw2.adaptedtext;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
/**
*
* @author util2
*/
public class Main {
public static void main(String[] args) {
ResizedTextFrame rtf = new ResizedTextFrame();
rtf.setVisible(true);
}
public static class ResizedTextFrame extends JFrame {
String title = "2D resized text example";
Font font = new Font("Tahoma", Font.PLAIN, 24);
Rectangle2D destRect = new Rectangle2D.Double(0, 0, 600, 200);
Shape textInShape;
double xText = 0, yText = 0;
public ResizedTextFrame() throws HeadlessException {
init();
}
private void init(){
setSize(800, 600);
setLocationRelativeTo(null); // Force center screen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Get a shape for wanted settings
textInShape = getTextInRectangle(title, font, destRect);
}
@Override
public void paint(Graphics g) {
// Get a 2D context
Graphics2D g2d = (Graphics2D)g;
// Storage
AffineTransform oldTr = g2d.getTransform();
// Set the background to white
g2d.setColor(Color.white);
g2d.fillRect(0, 0, getWidth(), getHeight());
//============================================================= Text
// Settings
AffineTransform atText = new AffineTransform();
atText.setToTranslation(150 + xText, 150 + yText + destRect.getHeight());
g2d.setTransform(atText);
// Fill the text to red
g2d.setColor(Color.red);
g2d.fill(textInShape);
// Set the text outline to blue
g2d.setColor(Color.blue);
g2d.draw(textInShape);
// Restore
g2d.setTransform(oldTr);
//==================================================================
//=========================================== Rectangle (boundaries)
// Settings
AffineTransform atRect = new AffineTransform();
atRect.setToTranslation(150, 150);
g2d.setTransform(atRect);
// Draw a rectangle around the text to green
g2d.setColor(Color.green.darker());
g2d.draw(destRect);
// Restore
g2d.setTransform(oldTr);
//==================================================================
}
public Shape getTextInRectangle(String text, Font font, Rectangle2D destRectangle){
// Create a new image to get Graphics2D for measure
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
// Create a FontRenderContext to prepare the calculation of elements of font
FontRenderContext frc = g2d.getFontRenderContext();
// Free graphics resources
g2d.dispose();
// Set the text
TextLayout txt = new TextLayout(text, font, frc);
// Get boundaries of text
Rectangle2D textBounds = txt.getBounds();
// Get percents (compare textBounds to destRectangle)
double percentX = destRectangle.getWidth() / textBounds.getWidth();
double percentY = destRectangle.getHeight() / textBounds.getHeight();
// Define an aspect transform
AffineTransform transform = new AffineTransform();
transform.setToScale(percentX, percentY);
//-- Specials settings for location of text ------------------------
xText = -txt.getBounds().getX() * percentX;
yText = -txt.getDescent() * percentY;
//------------------------------------------------------------------
// Get the shape
return txt.getOutline(transform);
}
}
}
使用的方法是形状矩形(字符串文本、字体、矩形2D析构图)
例如:
你自己试试 您可能会从绘制
Rectangle2D
或组件时使用的paint(Graphics)
方法中获得它。getGraphics()
否--不要使用Component.getGraphics(),因为获得的图形对象不会持久。请先阅读图形教程,然后再进一步进行此操作。