私はJRadioButtonsのセットを持ち、それぞれの隣に小さな「i」画像を置きたいと思っています。クリックすると、ラジオボタンの横にあるテキストに関する情報を含む新しいウィンドウが開きます。ラジオ ボタンの横に小さな「i」ラベルを配置するために使用する最適なコンポーネントは何ですか?
3 に答える
スタイルでこれを行ういくつかの可能性があります。
最も簡単な方法はJButton
、ラジオ ボタンの横に "i" 画像を付けて配置することです。適切なレイアウト マネージャー (GridBagLayout
もちろん) を使用すると、両方を簡単に揃えることができます。
もう 1 つの方法は、ラジオ ボタンにクライアント プロパティを設定し、ラジオ ボタン レンダラー (ルック アンド フィール) でこのクライアント プロパティを使用して、ボタンの横に「i」アイコンを表示することです。残念ながら、必要に応じて画像を含めるためにラジオボタンの境界を正しく管理する必要があるため、トップの実装は少し難しくなります (これは LnF でも実現されますが、見つけるのはそれほど簡単ではありません)。
javax.swing.ImageIcon
イメージを としてのコンストラクターに渡しますJRadioButton
。次に、ボタンのマウス クリックをリッスンし、マウス ポインターの座標が画像の境界内にあるかどうかを確認します。
問題の 'i' 部分のコンポーネントのタイプには、JLabel のようなものが最も役立つと思います。すべてのコンポーネントと同様に、JLabel にはマウス リスナーを追加できます。そこから、ユーザーがクリックしたときに何かをトリガーするために必要なアクセス権を取得できます。
以下のコードでは、単純な FlowLayout を使用しました。これは、GridBayLayout を使用したくない場合に、水平方向の配置を提供するのに論理的に適合するように感じられるからです。最終的には、レイアウトの設定方法によって異なりますが、FlowLayout のようなものがこのような状況で役立ちます。
例として、次のコードを見てください。
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
final JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel(new FlowLayout());
JLabel l = new JLabel(new ImageIcon(Main.class.getResource("info.png")));
l.addMouseListener(new MouseAdapter(){
@Override
public void mouseReleased(MouseEvent e) {
JOptionPane.showMessageDialog(f, "Clicked");
}
});
p.add(new JRadioButton());
p.add(l);
f.add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}