Как вычислить ширину шрифта?

Вы попробовали gvim пакет OLE? Я использовал его с предыдущими версиями Visual Studio, и это работало хорошо.

http://www.vim.org/download.php#pc - gvim##ole.zip

версия GUI А с поддержкой OLE. Это предлагает несколько дополнительных функций, таких как интеграция с Визуальным Developer Studio. Но это использует вполне немного больше памяти.

11
задан dove 6 October 2009 в 10:51
поделиться

4 ответа

Для одной строки вы можете получить показатели для данного шрифта чертежа и использовать их для вычисления размера строки. Например:

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);
34
ответ дан 3 December 2019 в 01:04
поделиться
7
ответ дан 3 December 2019 в 01:04
поделиться

вот простое приложение, которое может показать вам, как использовать FontMetrics при проверке ширины строки:

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);
    }


}
4
ответ дан 3 December 2019 в 01:04
поделиться

Взгляните на эту отличную презентацию, особенно на часть «Измерение текста». В нем объясняются доступные размеры и их использование: Расширенные темы Java 2D ™ для настольных приложений .

Дополнительная информация в Часто задаваемые вопросы по Java2D: В чем разница между логическими, визуальными и пиксельными границами?

2
ответ дан 3 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: