Как выровнять по центру заголовок в JFrame? - PullRequest
11 голосов
/ 12 марта 2012

У меня есть JFrame с заголовком . Я хочу, чтобы по центру выровнял заголовок , чтобы он отображался в середине заголовка JFrame .

Спасибо.

Ответы [ 4 ]

7 голосов
/ 12 марта 2012

Подумайте о том, чтобы оставить заголовок в левом углу ... но ... это приблизит вас к центру.Для кадров с изменяемым размером вам нужно переписать заголовок при изменении размера.

JFrame t = new JFrame();
t.setSize(600,300);
t.setFont(new Font("System", Font.PLAIN, 14));
Font f = t.getFont();
FontMetrics fm = t.getFontMetrics(f);
int x = fm.stringWidth("Hello Center");
int y = fm.stringWidth(" ");
int z = t.getWidth()/2 - (x/2);
int w = z/y;
String pad ="";
//for (int i=0; i!=w; i++) pad +=" "; 
pad = String.format("%"+w+"s", pad);
t.setTitle(pad+"Hello Center");
4 голосов
/ 14 сентября 2017

Адаптируя источник ответа из @ Java42, я сделал «обходной путь» для корректировки заголовка при изменении размера JFrame:

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;


public class JFrameTitleCenter {

    public void createAndShowGUI() {

        JFrame frame = new JFrame();
        frame.setPreferredSize(new Dimension(300, 200));
        frame.setTitle("Hello Center");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                titleAlign(frame);
            }

        });

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    private void titleAlign(JFrame frame) {

        Font font = frame.getFont();

        String currentTitle = frame.getTitle().trim();
        FontMetrics fm = frame.getFontMetrics(font);
        int frameWidth = frame.getWidth();
        int titleWidth = fm.stringWidth(currentTitle);
        int spaceWidth = fm.stringWidth(" ");
        int centerPos = (frameWidth / 2) - (titleWidth / 2);
        int spaceCount = centerPos / spaceWidth;
        String pad = "";
        pad = String.format("%" + (spaceCount - 14) + "s", pad);
        frame.setTitle(pad + currentTitle);

    }

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            new JFrameTitleCenter().createAndShowGUI();
        });
    }
}

Работа:

enter image description here

2 голосов
/ 12 марта 2012
I have a JFrame with a Title. I want center align the title, so that 
it appears in the middle of the JFrame's title.

просто невозможно центрировать narrarive в JFrames TitleBar, этот контейнер произошел от Native OS

  • Грязный хак возможен с помощью getSystemLookAndFeel в ОС Windows

  • создать недекорированный JFrame, добавив JPanel (имитированный Toolbar) с JButtons (JButtons с иконками, имитирующими стандартные кнопки)

0 голосов
/ 12 марта 2012

Я не знаю, что вы можете без использования сложной схемы.Если вам это нравится, вы можете применить заголовок с центрированным текстом к панели содержимого фрейма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...