【问题标题】:How to center align the title in a JFrame?如何在 JFrame 中居中对齐标题?
【发布时间】:2012-03-28 13:50:12
【问题描述】:

我有一个带有标题的JFrame。我希望 将标题居中对齐,以便它出现在 JFrame 标题的中间

谢谢。

【问题讨论】:

    标签: java swing jframe titlebar


    【解决方案1】:

    我不知道您是否可以不使用复杂的方案。如果您喜欢,您可以将带有居中文本的标题边框应用到框架的内容窗格。

    【讨论】:

      【解决方案2】:
      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

      • 在 Windows 操作系统中实现 getSystemLookAndFeel 可能会进行脏黑客攻击

      • 通过添加JPanel(模拟Toolbar)和JButtons(带有模拟标准按钮图标的JButtons)创建未装饰的JFrame

      【讨论】:

        【解决方案3】:

        考虑让标题左对齐...但是...这会让您靠近中心。对于可调整大小的帧,您需要在调整大小时重写标题。

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

        【讨论】:

        • +1,我想这是正确的答案,但我想他可以写一个 addWindowStateListener(...) 来调整大小 :-)
        【解决方案4】:

        调整@Java42 的answer's source,我做了一个“变通方法”来调整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();
                });
            }
        }
        

        工作:

        【讨论】:

          【解决方案5】:

          在netbeans中将jFrame中的标题居中对齐很容易,你需要做的如下:

          1.

          2.

          1. 运行您的应用程序。

          【讨论】:

            猜你喜欢
            • 2015-02-24
            • 2017-08-28
            • 1970-01-01
            • 2014-11-19
            • 2016-10-29
            • 2018-05-01
            • 1970-01-01
            • 2018-04-17
            • 2018-12-30
            相关资源
            最近更新 更多