Как выровнять заголовок по центру в JFrame?
У меня есть JFrame с заголовком . Я хочувыровнять Заголовок по центру, чтобы он появился в середине заголовка JFrame.
Спасибо.
4 ответа:
Подумайте о том, чтобы оставить заголовок левосторонним...но...это позволит вам приблизиться к центру. Для изменяемых кадров вам нужно переписать заголовок при изменении размера.
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");
Адаптируя Источник ответа из @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(); }); } }
Работа:
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.
Просто невозможно центрировать нарратив в
JFrames TitleBar
, этот контейнер пришел изNative OS
Грязный хак возможен с помощью реализации
getSystemLookAndFeel
в ОС WindowsСоздайте неразрешенные
JFrame
, добавивJPanel
(имитацияToolbar
) С помощью кнопок JButtons (кнопки JButtons с пиктограммами, имитирующими стандартные кнопки )