Я пытаюсь найти разные способы центрирования текста в главном меню, которое я пытаюсь создать, но все способы, которые я пробовал, центрируют строку с первой буквы. Есть ли способ определить длину переданной строки, а затем определить ее центр?
Как центрировать строку (используя g.drawString) по центру экрана
comment
Вы имеете в виду визуальное центрирование, которое будет зависеть от шрифта, которым отображается текст? Или вы имеете в виду по центру с равным количеством символов слева и справа от центра?
- person shoover   schedule 22.07.2015
comment
Равное количество символов слева и справа.
- person Jake Roper   schedule 22.07.2015
comment
Вы имеете в виду что-то вроде этого или это
- person MadProgrammer   schedule 22.07.2015
Ответы (2)
Если вы используете JLabel, перегрузите конструктор, используя атрибут center. пример:
label = new JLabel("insert text here");
to
label = new JLabel("insert text here", SwingConstants.CENTER);
person
sBourne
schedule
21.07.2015
У меня есть строковая переменная, которая передается в drawString, которая затем рисуется на экране. Без участия лейблов. Любые другие идеи? На всякий случай попробую вашу идею с лейблом.
- person Jake Roper; 22.07.2015
Хм. Тогда не совсем уверен, как обойти хак вычисления длины. Может быть, попробуйте нарисовать в JLabel и отцентрировать его.
- person sBourne; 22.07.2015
@JakeRoper,
No labels involved.
- в этом суть. Почему вы не используете JLabel и соответствующий менеджер компоновки. Тогда вся работа по отображению текста и его центрированию будет сделана Swing и менеджером компоновки.
- person camickr; 22.07.2015
Я написал это некоторое время назад.
/**
* This method centers a <code>String</code> in
* a bounding <code>Rectangle</code>.
* @param g - The <code>Graphics</code> instance.
* @param r - The bounding <code>Rectangle</code>.
* @param s - The <code>String</code> to center in the
* bounding rectangle.
* @param font - The display font of the <code>String</code>
*
* @see java.awt.Graphics
* @see java.awt.Rectangle
* @see java.lang.String
*/
public void centerString(Graphics g, Rectangle r, String s,
Font font) {
FontRenderContext frc =
new FontRenderContext(null, true, true);
Rectangle2D r2D = font.getStringBounds(s, frc);
int rWidth = (int) Math.round(r2D.getWidth());
int rHeight = (int) Math.round(r2D.getHeight());
int rX = (int) Math.round(r2D.getX());
int rY = (int) Math.round(r2D.getY());
int a = (r.width / 2) - (rWidth / 2) - rX;
int b = (r.height / 2) - (rHeight / 2) - rY;
g.setFont(font);
g.drawString(s, r.x + a, r.y + b);
}
person
Gilbert Le Blanc
schedule
21.07.2015