我有一些矩形。给定一个声明的矩形并定义为:
Rectangle2D rec = new Rectangle2D.Double(50, 50, 50, 50)
是否可以在此矩形内添加一串文字? 感谢
答案 0 :(得分:3)
不要试图将字符串放入预定义的矩形中,而应考虑使用FontMetrics
来查找字符串的边界。 getStringBounds()
方法显示在此example中,如下所示。
附录:一旦你知道边界,就可以更容易地将字符串放在一个更大的矩形中或修剪它以适应。 'HORIZONTAL ELLIPSIS' (U+2026)通常用于表示省略。
答案 1 :(得分:2)
您可以在矩形的边界内绘制一个字符串。
Graphics g = ...
...
...
String yourString = ...
...
...
g.drawString(yourString, rec.getX(), rec.getY());
使用FontMetrics可能对您有用。
答案 2 :(得分:0)
您可以使用以下代码通过简单的调整大小方法进行操作:
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);
}
}
}
使用的方法是Shape getTextInRectangle(String text, Font font, Rectangle2D destRectangle)
。
示例:
自己尝试!