带有信息链接的单选按钮

时间:2010-03-11 14:07:02

标签: java user-interface swing jradiobutton

我希望有一组JRadioButtons,每个旁边都有一个'i'图像,当点击它时会打开一个新窗口,其中包含有关单选按钮旁边文本的信息。用于对齐单选按钮旁边的小“i”标签的最佳组件是什么?

3 个答案:

答案 0 :(得分:1)

将您的图片作为javax.swing.ImageIcon传递给JRadioButton的构造函数。然后听取按钮上的鼠标点击,并检查鼠标指针的坐标是否在图像的边界内。

答案 1 :(得分:1)

使用样式可以做到这一点。

最简单的一个显然就是在您的单选按钮旁放置一个带有“i”图像的JButton。使用正确的布局管理器(当然GridBagLayout)将允许您轻松对齐。

另一个可能是在您的单选按钮中设置客户端属性,然后让您的单选按钮渲染器(在look'n'feel中)使用此客户端属性来显示按钮旁边的“i”图标。不幸的是,这是一个有点难以实现的顶级工具,因为它要求你在需要时正确管理单选按钮边界以包含图像(这也是在LnF中实现的,但不容易找到)。

答案 2 :(得分:0)

我发现类似于JLabel的东西对于问题的“i”部分的组件类型最有用。像所有组件一样的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);
            }
        });
    }
}