JRadioButton: как заменить текст на IconImage?

Я хочу заменить текст в моем списке переключателей значком.

Я пробовал это:

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

Но это заменяет переключатель и текст значком. Я хотел бы сохранить переключатель и отобразить изображение.

Что я должен делать?


Что я сейчас получаю:

Введите здесь описание изображения

Но я хочу, чтобы это закончилось вот этим:

Введите здесь описание изображения


person Jason Rogers    schedule 21.07.2011    source источник


Ответы (4)


общедоступный JRadioButton (текст строки, значок значка) и простой пример здесь

person mKorbel    schedule 21.07.2011
comment
@англ. Фуад: Я также вижу его в большинстве вопросов о свинге, кажется, что mKorble - энтузиаст свинга. - person Harry Joy; 21.07.2011
comment
@Eng.Fouad, потому что есть много веселых, добрых людей с PeaceFullFaces и изучением английского языка :-), что для меня сложнее, чем для любого из PL, насколько я знаю, - person mKorbel; 21.07.2011
comment
это для меня сложнее, чем любой из PL, насколько я знаю.. Языки программирования намного логичны, чем английский. ;) - person Andrew Thompson; 21.07.2011
comment
Извините, но это не то, что я ищу, я хочу сохранить существующее радио и заменить текст изображением. так как здесь заменяет переключатель по умолчанию изображением и сохраняет текст - person Jason Rogers; 24.07.2011
comment
@ Джейсон Роджерс, я не вижу в этом никаких проблем, в чем твоя проблема? - person mKorbel; 24.07.2011
comment
Поскольку я не разбираюсь в словах, я нарисовал, в чем моя проблема, и добавил ее в редактирование. - person Jason Rogers; 25.07.2011
comment
этот ответ неверен, не должен быть принятым. Правильный ответ дает @andrew-thompson. - person Trasplazio Garzuglio; 28.06.2012

Создайте 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
person Eva    schedule 09.10.2011

Я только что воспроизвел описанное вами поведение, используя этот источник:

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. Кнопка отключена (отрисовывается некорректно).
person Andrew Thompson    schedule 25.07.2011
comment
похоже, что Java6 забыли за это, но я думаю, что вы здесь один из Htlm Gurus ... +1 - person mKorbel; 25.07.2011
comment
@mKorbel О нет! Я могу показаться гуру HTML для Java-программистов, но для веб-дизайнеров я новичок. Но спасибо, что сказал это. ;) Кстати, у тебя был хороший ответ, +1. Мне нравятся ответы, содержащие ссылки на последние JDocs. :) - person Andrew Thompson; 25.07.2011
comment
Я действительно запутался, как быстро может программировать сегодняшний новичок - person mKorbel; 25.07.2011

Не существует конструктора переключателей, который позволяет использовать изображение в качестве аргумента содержимого вместо текста. Единственный способ заменить текст радиокнопки изображением — это сгенерировать 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);     
       }
}
person Saralou    schedule 16.10.2014
comment
Отличный ответ! Это более полезно, чем ответ @Andrew Thompson, потому что он использует изображение, фактически связанное с банкой, а не внешний ресурс. - person Andrei Vajna II; 28.10.2014