2010-03-11 74 views
0

我想要一组JRadioButton并在每个旁边有一个'i'图像,点击后会打开一个包含单选按钮旁边文本信息的新窗口。什么是最好的组件来对齐单选按钮旁边的小'i'标签?带有信息链接的JRadio按钮

回答

1

有一些可能性与样式做到这一点。

最简单的一个显然是把JButton加上你的单选按钮旁边的“我”图像。使用正确的布局管理器(当然是GridBagLayout)可以让您轻松对齐。

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

1

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

0

我发现类似JLabel的东西对于问题'i'部分的组件类型最有用。类似于所有组件的JLabels可以将鼠标监听器添加到它们中,并且从那里您可以获得所需的访问权限,以便在用户单击某个组件时触发某些内容。

在下面的代码中,我使用了一个简单的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); 
      } 
     }); 
    } 
}