我正在尝试创建两个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:
提前致谢!