Swing:调整图标大小以适合JLabel中指定字体的文本

时间:2012-11-11 12:19:54

标签: java swing icons jlabel

我正在尝试创建两个JLabel - 一个用于图标( UIManager.getIcon(“OptionPane.informationIcon”) - 一个Java的标准图标)和一个用于文本。当然,我知道有一个JLabel的构造函数,可以从图标和文本制作一个标签,但我需要两个标签,因为当鼠标移动时,其中一个应该突出显示,我省略了这部分代码。

问题是我无法找到如何更改图标大小。至少我想手动设置图标的高度,但如果它的高度自动计算以适应指定字体的文本会更好。我花了几个小时试图在网上找到信息,但找不到任何相关信息。 我试图实现Icon类并覆盖getIconHeight()和getIconWidth()方法,但我不知道我的Icon对象下一步该做什么,因为Icon是一个接口所以它没有构造函数。

这是我的简化代码:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import net.miginfocom.swing.MigLayout;

public class AppView
{
    private final JFrame main_frame;

    public AppView()
    {
        main_frame = new JFrame();
        main_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main_frame.setTitle("Example");

        JPanel main_panel = new JPanel() {
            private static final long serialVersionUID = 1L;

            public Dimension getPreferredSize()
            {
                return new Dimension(200,  200);
            }
        };

        main_frame.getContentPane().add(main_panel, BorderLayout.CENTER);
        main_panel.setLayout(new MigLayout());

        JLabel label_icon = new JLabel(UIManager.getIcon("OptionPane.informationIcon"));
        JLabel label_text = new JLabel("Text goes here");
        label_text.setFont(new Font("sans-serif", Font.PLAIN, 12));
        main_panel.add(label_icon);
        main_panel.add(label_text);

        main_frame.pack();
        main_frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run() 
            {
                new AppView();
            }
        });
    }
}

结果如下所示,Icon高于text:

enter image description here

提前致谢!

0 个答案:

没有答案