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