テキストを描画するのにjavaを使用していますが、文字列の幅を計算するのは難しいです。 例: zheng中国... この文字列はどれくらい占有されますか?フォントの幅を計算するには?
答えて
単一の文字列の場合、指定した描画フォントのメトリックを取得し、それを使用して文字列サイズを計算することができます。たとえば:
:あなたは、このような所定の幅内のテキストの段落を流すなど、より複雑なテキストレイアウト要件を、持っている場合String message = new String("Hello, StackOverflow!");
Font defaultFont = new Font("Helvetica", Font.PLAIN, 12);
FontMetrics fontMetrics = new FontMetrics(defaultFont);
//...
int width = fontMetrics.stringWidth(message);
、あなたは、このような(ドキュメントから)この例としてjava.awt.font.TextLayout
オブジェクトを作成することができますここ
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);
Can not instan FontMetrics型を作成します。 –
使用方法:FontMetrics fontMetrics = g.getFontMetrics(); –
java.awt.FontMetricsは抽象です。インスタンス化できません FontMetrics metrics = new FontMetrics(font); (フォント)の後とセミコロンの前に空の中括弧を置かなければならないところがあります。なぜ私は考えていない。 FontMetrics metrics = new FontMetrics(font){}; –
Graphics.getFontMetrics()およびFontMetrics.stringWidth()を参照してください。
は、文字列の幅をテストするときにフォントメトリックスを使用する方法をお見せすることができますシンプルなアプリです:
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);
}
}
は、この偉大なプレゼンテーションを見てみましょう、特に「テキスト測定」の部分です。利用可能なサイズと用途を説明しています:Advanced Java 2D™ topics for Desktop Applications。
Java2D FAQ: What is the difference between logical, visual and pixel bounds?
"デスクトップアプリケーション用の高度なJava 2Dトピック"へのリンクがなくなりました。 – dastrobu
のいくつかのより多くの情報は以下のクラスでのgetWidthメソッドを使用します。
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();
}
}
あなたは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();
解決策を説明してください – Jens
- 1. グリッドのブロックの幅計算
- 2. Slickスライダ幅の再計算
- 3. JavaFx TreeTableCell幅の計算
- 4. XSL - テーブル幅を計算する
- 5. PHP GDでテキスト幅を計算する
- 6. androidのOpenGLオブジェクトの幅を計算するには
- 7. Javascriptの帯域幅使用量を計算するには?
- 8. Javascript:divの幅を画像の合計として計算する
- 9. GTX 970帯域幅計算
- 10. 隠し画像とdivの合計幅を計算する
- 11. テキスト領域の幅に応じてテキストサイズを計算する
- 12. 利用可能な幅とフォントに基づいてテキストの高さを計算しますか?
- 13. デバイスモードでのクロムの計算幅
- 14. 計算機の高さの幅
- 15. 可変幅のフォントを等幅のビットマップフォントに変換する
- 16. PdfPTableを列幅を動的に計算する方法
- 17. Firebaseデータベース帯域幅の計算
- 18. jQueryドキュメントの幅と計算数
- 19. スワイプブルビューの幅と高さを計算すると反応する
- 20. 高さと幅に基づいて価格を計算する
- 21. C++でそのフォントの高さを計算しますか?
- 22. パスの幅を定義してエリアを計算する
- 23. 固定幅のテキストブロックの高さをPHPで計算する
- 24. Androidの画像の幅を計算する
- 25. バウンディングボックスと画像の幅と高さのスケールを計算する
- 26. CSSの計算で要素の可変幅を使用する
- 27. SOタグエディタの入力幅を計算する
- 28. Jquery:隠された入力の幅を計算する
- 29. ExtJS 4:幅の自動計算を防止する
- 30. モバイルデバイスの幅と高さを計算する方法
が重複する可能性をJavaの文字列の表示幅を計算する](http://stackoverflow.com/questions/258486/calculate-the-display-width-of-a-string-in-java) – Zich