我想要一组 JRadioButtons,并且在每个 JRadioButtons 旁边都有一个小“i”图像,单击该图像将打开一个新窗口,其中包含有关单选按钮旁边文本的信息。用于对齐单选按钮旁边的小“i”标签的最佳组件是什么?
问问题
250 次
3 回答
1
将您的图像作为 a 传递javax.swing.ImageIcon
给JRadioButton
. 然后监听鼠标点击按钮并检查鼠标指针的坐标是否在图像的边界内。
于 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 回答