0

我想要一组 JRadioButtons,并且在每个 JRadioButtons 旁边都有一个小“i”图像,单击该图像将打开一个新窗口,其中包含有关单选按钮旁边文本的信息。用于对齐单选按钮旁边的小“i”标签的最佳组件是什么?

4

3 回答 3

1

将您的图像作为 a 传递javax.swing.ImageIconJRadioButton. 然后监听鼠标点击按钮并检查鼠标指针的坐标是否在图像的边界内。

于 2010-03-11T14:12:21.890 回答
1

有一些可能性可以用风格来做到这一点。

最简单的方法显然是JButton在单选按钮旁边放一个带有“i”图像的图片。使用正确的布局管理器(GridBagLayout当然)可以让您轻松对齐两者。

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

于 2010-03-11T14:18:18.060 回答
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);
            }
        });
    }
}
于 2010-03-11T14:48:09.847 回答