JRadioButton: как заменить текст на IconImage? - PullRequest
5 голосов
/ 21 июля 2011

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

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

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

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

Что мне делать?


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

Enter image description here

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

Enter image description here

Ответы [ 4 ]

9 голосов
/ 10 октября 2011

Создайте 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
5 голосов
/ 25 июля 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);
            }
        });
    }
}

Where is the radio button 'selected' icon?

Мне кажется, это ошибка, хотя я не могу вспомнить радио с иконкой. Как они должны выглядеть?


Время проникнуть в мою "шкатулку".

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);
            }
        });
    }
}

Radio Button with Image

Эта техника не будет работать, если:

  1. В этом сценарии использования требуются значки других типов (нажатие, переворачивание, выбор и т. Д.)
  2. Кнопка отключена (будет отображаться неправильно).
5 голосов
/ 21 июля 2011
3 голосов
/ 16 октября 2014

Нет конструктора переключателей, который разрешает использование изображения в качестве аргумента содержимого вместо текста.Единственный способ заменить текст переключателя на изображение - это сгенерировать 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);     
       }
}
...