JMenuItem上的设置图标压缩其标签文本高度

时间:2017-01-20 18:25:44

标签: java swing

将纯文本项目添加到菜单时,无论是JMenu还是JPopupMenu,每个菜单项的高度可能都基于其字体加上一些空白边缘,看起来不错。

向项目添加图标会使项目的高度降低到图标的高度。如果图标的高度小于字体的大小,则项目高度明显低于字体的最小高度。

我能找到的最近的帖子是Setting icon in JMenuItem makes menu text match icon color,但颜色不是问题。我使用了类似的SSCCE:

import java.awt.*;
import javax.swing.*;

public class SquishText extends JFrame
{
    public SquishText()
    {
        JMenu menu = new JMenu("a menu");

        menu.add(new JMenuItem("item with no icon"));
        menu.add(new JMenuItem("label text goes here", new Icon(){
            @Override
            public void paintIcon (Component c, Graphics g, int x, int y) {
                ((Graphics2D)g).fill3DRect (0, 0, 8, 8, true);
            }
            @Override
            public int getIconWidth() {
                return 8;
            }
            @Override
            public int getIconHeight() {
                return 8;
            }
        }));
        menu.add(new JMenuItem("another item with no icon"));

        JMenuBar menubar = new JMenuBar();
        menubar.add(menu);
        this.setJMenuBar(menubar);
    }


    public static void main (String[] args) throws Exception
    {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SquishText wtf = new SquishText();
        wtf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        wtf.setVisible(true);
    }
}

结果发布在此处:http://imgur.com/a/J2Upo

enter image description here enter image description here

鼠标悬停在菜单项上会显示中间条目的高度明显变小和难看。

为了在我们的实际代码中添加图标,他们已经尝试了我们在Action上设置数据的首选方法,

action.putValue (Action.SMALL_ICON, the_icon_instance);

并且作为一个绝望的后备,直接在创建的JMenuItem上设置它,

menu.add(action).setIcon(the_icon_instance);

两种情况下的行为相同,与SSCCE相匹配。 图标的添加方式似乎并不重要,只是图标存在这一事实。

这可能是L& F(Windows 7上的Java 8)的一个问题,但是试图在WindowsLookAndFeel代码中搜索一下就会让人感到困惑。

所以他们已经向我求助了,但这是我第一次遇到这样的事情。 (我的项目很少在菜单中使用图标。)我觉得整个事情可以通过setMinimumSize' / 'setPreferredSize在正确的位置解决,但我觉得不应该真的需要......而且我们也是无论如何都不知道正常线高 之前是什么。

我们在这里做了什么noob错误? (讨厌的图标,在我的日子里,它是vt100上的所有绿色文字,离开我的草坪等等。)

0 个答案:

没有答案