1

我正在尝试创建两个 JLabels - 一个用于图标(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:

在此处输入图像描述

提前致谢!

4

0 回答 0