2つのJLabelを作成しようとしています。1つはアイコン用(UIManager.getIcon( "OptionPane.informationIcon") -Javaの標準アイコンの1つ)、もう1つはテキスト用です。確かに、アイコンとテキストから1つのラベルを作成できるJLabelのコンストラクターがあることは知っていますが、正確に2つのラベルが必要です。マウスが移動すると、そのうちの1つが強調表示されるため、コードのこの部分は省略します。
問題は、アイコンのサイズを変更する方法がわからないことです。少なくともアイコンの高さを手動で設定したいのですが、指定したフォントのテキストに合うようにアイコンの高さを自動的に計算するとよいでしょう。Webで情報を探すのに数時間を費やしましたが、相対的なものは見つかりませんでした。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();
}
});
}
}
結果は次のとおりです。ご覧のとおり、アイコンはテキストよりも高くなっています。
前もって感謝します!