Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing:调整图标大小以适应JLabel中指定字体的文本_Java_Swing_Icons_Jlabel - Fatal编程技术网

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

Java Swing:调整图标大小以适应JLabel中指定字体的文本,java,swing,icons,jlabel,Java,Swing,Icons,Jlabel,我正在尝试创建两个JLabel—一个用于图标(UIManager.getIcon(“OptionPane.informationIcon”)—一个用于Java标准图标),另一个用于文本。当然,我知道有一个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();
            }
        });
    }
}
如您所见,结果如下:图标高于文本:


提前谢谢

我预测,如果你试图将这些图标压缩到文本的高度,结果会不太令人满意。我建议不要调整它们的大小。@Andrew Thompson如果我使用JTree并更改节点文本的字体大小,图标会自动调整大小以适应文本高度。那又怎样?如果这些图标是动态生成的,那么它们可以很容易地放大或缩小。缩放(固定大小)图像时要保持质量要困难得多。顺便说一句——“使用JTree并更改节点文本的字体大小,图标会自动调整大小以适应文本高度”不,不是。不是根据我的快速测试。你能提供显示它调整大小的代码吗?“那么你认为解决这个问题的唯一方法是将所需的图像保存到我的计算机,用一些图像编辑器调整它们的大小,然后在代码中使用它们?”这不如(例如)有一种动态绘制它们的方法,而是这样做。这些符号似乎可以在填充颜色的形状(圆形、三角形、八角形)中使用字符('i'、'!'、'?')复制。