Estoy usando java para dibujar texto, pero es difícil para mí calcular el ancho de la cadena. por ejemplo: zheng 中国 ... ¿Cuánto tiempo ocupará esta cadena?¿Cómo calcular el ancho de la fuente?
Respuesta
Para una sola cadena, puede obtener las métricas para la fuente de dibujo dada, y usar eso para calcular el tamaño de la cadena. Por ejemplo:
String message = new String("Hello, StackOverflow!");
Font defaultFont = new Font("Helvetica", Font.PLAIN, 12);
FontMetrics fontMetrics = new FontMetrics(defaultFont);
//...
int width = fontMetrics.stringWidth(message);
Si usted tiene requisitos de diseño de texto más complejas, tales como el flujo de un párrafo de texto dentro de un ancho dado, puede crear un objeto java.awt.font.TextLayout
, como este ejemplo (de los documentos):
Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());
Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
bounds.getY()+loc.getY(),
bounds.getWidth(),
bounds.getHeight());
g.draw(bounds);
No se puede instalar tia el tipo FontMetrics. –
Uso: FontMetrics fontMetrics = g.getFontMetrics(); –
java.awt.FontMetrics es abstracto; no se puede crear una instancia FontMetrics metrics = new FontMetrics (font); Encontré en otro lado que tienes que poner un par de llaves vacías después de la (fuente) y antes del punto y coma. No tengo ni idea de porqué. FontMetrics metrics = new FontMetrics (font) {}; –
aquí es una aplicación sencilla que puede mostrar cómo utilizar FontMetrics al probar el ancho de una cadena:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUITest {
JFrame frame;
public static void main(String[] args){
new GUITest();
}
public GUITest() {
frame = new JFrame("test");
frame.setSize(300,300);
addStuffToFrame();
SwingUtilities.invokeLater(new Runnable(){
public void run() {
frame.setVisible(true);
}
});
}
private void addStuffToFrame() {
JPanel panel = new JPanel(new GridLayout(3,1));
final JLabel label = new JLabel();
final JTextField tf = new JTextField();
JButton b = new JButton("calc sting width");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
FontMetrics fm = label.getFontMetrics(label.getFont());
String text = tf.getText();
int textWidth = fm.stringWidth(text);
label.setText("text width for \""+text+"\": " +textWidth);
}
});
panel.add(label);
panel.add(tf);
panel.add(b);
frame.setContentPane(panel);
}
}
Tome un vistazo a esta gran presentación, especialmente la parte "Medición del texto". Explica los tamaños disponibles y sus usos: Advanced Java 2D™ topics for Desktop Applications.
Algunos más información en Java2D FAQ: What is the difference between logical, visual and pixel bounds?
El enlace a "Temas avanzados de Java 2D ™ para aplicaciones de escritorio" está muerto. – dastrobu
Utilice el método getWidth en la clase siguiente:
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
class StringMetrics {
Font font;
FontRenderContext context;
public StringMetrics(Graphics2D g2) {
font = g2.getFont();
context = g2.getFontRenderContext();
}
Rectangle2D getBounds(String message) {
return font.getStringBounds(message, context);
}
double getWidth(String message) {
Rectangle2D bounds = getBounds(message);
return bounds.getWidth();
}
double getHeight(String message) {
Rectangle2D bounds = getBounds(message);
return bounds.getHeight();
}
}
Usted puede encontrar desde Font.getStringBounds():
String string = "Hello World";
// Passing or initializing an instance of Font.
Font font = ...;
int width = (int) font.getStringBounds(string, new FontRenderContext(font.getTransform(), false, false)).getBounds().getWidth();
Por favor explique su solución – Jens
- 1. ¿Cómo calcular el ancho de la barra de desplazamiento?
- 2. ¿Cómo calcular el ancho de la cuerda en iText?
- 3. ¿Cómo calcular el ancho de una cadena de texto de una fuente específica y tamaño de fuente?
- 4. Calcular el ancho del texto con PHP GD
- 5. Calcular la altura del texto en función del ancho y la fuente disponibles?
- 6. Cómo calcular el número de líneas de código fuente
- 7. Calcular con precisión el ancho del texto en unidades métricas
- 8. Calcular el ancho de visualización de una cadena en Java
- 9. Calcular el ancho de visualización de una cadena en C#?
- 10. ¿Cómo puedo calcular la altura y el ancho de la pantalla en tiempo de ejecución?
- 11. ¿Cómo se calcula el ancho de la fuente de cadena en píxeles?
- 12. Calcular el ancho total de los niños con jQuery
- 13. ¿Cómo calcular el ancho de UILabel en función de la longitud del texto?
- 14. C# calcular la altura de una cadena con el ancho dado
- 15. Cómo calcular la altura y el ancho de un rectángulo/cuadrado isométrico
- 16. ¿Cómo calcular el tamaño de un UIFont cuando el texto de la etiqueta está restringido para ajustarse al ancho?
- 17. Android: fuente de ancho fijo en AlertDialog
- 18. ¿Cómo establecer el ancho de la fuente en una vista de texto de Android?
- 19. ¿Cómo puedo aumentar el tamaño de fuente en función del ancho de la ventana?
- 20. Calcular ancho y alto de Flv y Swf usando C#
- 21. Zend_Pdf calcular la longitud de la cadena de texto en la fuente actual para el ajuste de línea
- 22. Cómo calcular el ancho total del texto incluyendo el rumbo izquierdo y derecho
- 23. ¿Cómo controlar/calcular el uso del ancho de banda de un servidor NodeJS?
- 24. ancho DIV inmediatamente después de agregar es calcular mal?
- 25. Cómo obtener o calcular el ancho/alto de una vista inflada
- 26. ¿Cómo calcular la fragmentación?
- 27. Calcular altura para imagen/video según la relación de aspecto y el ancho
- 28. cómo calcular la altura y el ancho del textbock en carga si creo un bloque de texto desde el código?
- 29. Calcular el tamaño del texto de acuerdo con el ancho del área de texto
- 30. Cómo ajustar/cambiar el ancho de la barra de desplazamiento
duplicado posible de [ Calcule el ancho de visualización de una cadena en Java] (http://stackoverflow.com/questions/258486/calculate-the-display-width-of-a-string-in-java) – Zich