首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JMenu文本未居中

JMenu文本未居中
EN

Stack Overflow用户
提问于 2011-03-23 03:53:29
回答 2查看 558关注 0票数 0

我扩展了BasicMenuUI,并覆盖了getPreferredSize(JComponent c),因此JMenu的文本不再居中。

我试着用几个setAlignment方法来修复它,但是都不起作用。

我想有相同的大小为所有的菜单,和文本居中。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-03-23 07:06:36

继承自BasicMenuItemUI的相关getPreferredSize()应该“适合于外观”。每个L&F使用不同大小的装饰品。如果您没有这样做,您应该返回null并指定“组件的布局管理器”。

当然,sscce会有所帮助。

附录:

JMenu的文本不再居中。

我不认为它曾经居中,但如果需要,您可以移动textRect

代码语言:javascript
运行
复制
class CustomMenuUI extends BasicMenuUI {

    public static ComponentUI createUI(JComponent c) {
        return new CustomMenuUI();
    }

    @Override
    protected void paintText(Graphics g, JMenuItem menuItem,
            Rectangle textRect, String text) {
        g.setColor(Color.red);
        int w2 = menuItem.getBounds().width / 2;
        textRect.translate(w2 - textRect.width / 2, 0);
        super.paintText(g, menuItem, textRect, text);
    }

    @Override
    public Dimension getPreferredSize(JComponent c) {
        return new Dimension(80, 32);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2011-03-23 07:54:12

代码语言:javascript
运行
复制
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                try {
                    UIManager.put("MenuUI", "testmenuui.CustomMenuUI");
                    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                        if ("Nimbus".equals(info.getName())) {
                            UIManager.setLookAndFeel(info.getClassName());
                            break;
                        }
                    }
                    createAndShowGui();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private static void createAndShowGui() {
        JMenuBar menuBar = new JMenuBar();
        JMenu menuTest1 = new JMenu("Menu1");

        JMenu menuTest2 = new JMenu("Menu2");

        menuBar.add(menuTest1);
        menuBar.add(menuTest2);

        JFrame frame = new JFrame();
        frame.setJMenuBar(menuBar);
        frame.setPreferredSize(new Dimension(800, 600));
        frame.pack();
        frame.setVisible(true);
    }
}

class CustomMenuUI extends BasicMenuUI {

    public static ComponentUI createUI(JComponent c) {
        return new CustomMenuUI();
    }

    @Override
    protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) {
        g.setColor(Color.black);
        super.paintBackground(g, menuItem, bgColor);
    }

    @Override
    protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) {
        g.setColor(Color.white);
        super.paintText(g, menuItem, textRect, text);
    }

    @Override
    public Dimension getPreferredSize(JComponent c) {
        return new Dimension(100, 100);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5396991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档