6

我想用图标替换单选按钮列表中的文本。

我试过这个:

rotateButton = new JRadioButton(rotateIcon.getImage());

但这用图标替换了单选按钮和文本。我想保留单选按钮并显示图像。

我应该怎么办?


我目前得到的是:

在此处输入图像描述

但我希望它以这样的方式结束:

在此处输入图像描述

4

4 回答 4

9

创建一个没有文本的 JRadioButton 并在其旁边放置一个带有图像的 JLabel。您还可以创建一个类来隐藏复杂性。

import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.event.ChangeListener;

public class RadioButtonWithImage extends JPanel {

private JRadioButton radio = new JRadioButton();
private JLabel image;

public RadioButtonWithImage(Icon icon) {
    image = new  JLabel(icon);
    add(radio);
    add(image);
}

public void addToButtonGroup(ButtonGroup group) {
    group.add(radio);
}

public void addActionListener(ActionListener listener) {
    radio.addActionListener(listener);
}

public void addChangeListener(ChangeListener listener) {
    radio.addChangeListener(listener);
}

public Icon getImage() {
    return image.getIcon();
}

public void setImage(Icon icon) {
    image.setIcon(icon);
}

} // end class RadioButtonWithImage
于 2011-10-09T22:16:10.253 回答
5

public JRadioButton(String text, Icon icon)和简单的例子在这里

于 2011-07-21T11:06:02.830 回答
5

我刚刚使用此来源复制了您描述的行为:

import java.awt.Image;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.net.URL;

class RadioWithImage {

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://www.gravatar.com/avatar/" +
            "a1ab0af4997654345d7a949877f8037e?s=128");
        Image image = ImageIO.read(url);
        final ImageIcon imageIcon = new ImageIcon(image);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JRadioButton radioButton = new JRadioButton("A.T.", imageIcon);
                JOptionPane.showMessageDialog(null, radioButton);
            }
        });
    }
}

单选按钮“已选择”图标在哪里?

这对我来说似乎是一个错误,尽管我不记得看到带有图标的收音机。他们应该怎么看?


是时候进入我的“黑客盒子”了。

import javax.swing.*;

class RadioWithImage {

    public static void main(String[] args) throws Exception {
        String url = "http://www.gravatar.com/avatar/" +
            "a1ab0af4997654345d7a949877f8037e?s=128";
        final String html = "<html><body><img src='" +
            url +
            "' width=128 height=128>";
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JRadioButton radioButton = new JRadioButton(html);
                JOptionPane.showMessageDialog(null, radioButton);
            }
        });
    }
}

带图像的单选按钮

如果出现以下情况,此技术将不起作用:

  1. 用例需要其他类型的图标(按下、翻转、选中等)
  2. 该按钮被禁用(它将不正确地呈现)。
于 2011-07-25T04:21:23.900 回答
4

没有单选按钮构造函数允许图像作为内容参数而不是文本。用图像替换单选按钮文本的唯一方法是生成 html 并将其作为参数传递给默认构造函数。

import javax.swing.*;

class RadioWithImage {

    public static void main(String[] args) throws Exception {
        URL url = Windows_ChordsGenerator.class.getResource("/images/img1.png");

        final String html = "<html><body><img src='" + url.toString() +"'>";

        JRadioButton radioButton = new JRadioButton(html);     
       }
}
于 2014-10-16T09:51:13.497 回答