2015-05-13 2 views
1

Есть ли способ автоматически центрировать вычерченную строку, не делая ее вручную? Или вам придется делать это вручную каждый раз?Как центрировать drawString?

+2

В каком контексте? В графическом интерфейсе? В текстовом файле? На консоли? Если вы имеете в виду GUI, то какая библиотека? Свинг? AWT? Android? Другие? –

+0

Возможно, в графическом интерфейсе с использованием библиотеки графики – Antidisestablishmentarianism

+0

Возможно, здесь не возможно. Либо вы используете графический интерфейс, либо нет. Если это так? Иначе ответ сильно отличается. –

ответ

3

Поскольку это графический интерфейс Swing, я собираюсь предложить вам сконцентрироваться на графическом интерфейсе - поместите текст в JLabel с горизонтальным выравниванием, установленным на SwingConstants.CENTER, и поместите JLabel в такие способ, которым он тоже центрирован, скажем, в контейнере BorderLayout, находящемся в позиции BorderLayout.PAGE_START, и бинго, ваш текст центрирован.

Например, следующий код показывает, как:
enter image description here

import java.awt.BorderLayout; 
import java.awt.Font; 

import javax.swing.*; 

public class CenteredText extends JPanel { 
    private static final String TOP_TEXT = "Top Text"; 
    private static final String CENTER_TEXT = "Center Text"; 
    private static final String BOTTOM_TEXT = "Bottom Text"; 
    public CenteredText() { 
     JLabel topLabel = new JLabel(TOP_TEXT, SwingConstants.CENTER); 
     topLabel.setFont(topLabel.getFont().deriveFont(Font.BOLD, 20f)); 

     JLabel centerLabel = new JLabel(CENTER_TEXT, SwingConstants.CENTER); 
     centerLabel.setFont(centerLabel.getFont().deriveFont(Font.BOLD, 80f)); 
     int ebGap = 20; 
     centerLabel.setBorder(BorderFactory.createEmptyBorder(ebGap, ebGap, ebGap, ebGap)); 

     JLabel bottomLabel = new JLabel(BOTTOM_TEXT, SwingConstants.CENTER); 
     bottomLabel.setFont(bottomLabel.getFont().deriveFont(Font.PLAIN, 8f)); 

     setLayout(new BorderLayout()); 
     add(topLabel, BorderLayout.PAGE_START); 
     add(centerLabel, BorderLayout.CENTER); 
     add(bottomLabel, BorderLayout.PAGE_END); 
    } 

    private static void createAndShowGui() { 
     CenteredText mainPanel = new CenteredText(); 

     JFrame frame = new JFrame("CenteredText"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
}