Изменить размер ImageIcon в JRadioButton - PullRequest
4 голосов
/ 06 апреля 2010

Я просто хочу изменить размер ( диаметр ) фактического ( по умолчанию ) ImageIcon моего JRadioButton. Я изменил размер шрифта, отображаемого в виджете, поэтому он выглядит глупо с такой большой кнопкой.

JRadioButton button = new JRadioButton("Button");
button.setFont(new Font("Lucida Grande",Font.PLAIN, 11));

дает мне эту гигантскую кнопку:

GIANT button!!

Действительно ли мне нужно создавать свой собственный ImageIcon? Или я могу как-то масштабировать по умолчанию, без особых хлопот?

Ответы [ 4 ]

3 голосов
/ 06 апреля 2010

Нет значков, добавленных в JRadioButton. Пользовательский интерфейс просто рисует иконки по мере необходимости, поэтому вы не можете использовать методы getIcon ... () для получения иконок и масштабирования. Таким образом, в качестве обходного пути вам необходимо сначала создать собственное изображение значков, прежде чем их масштабировать.

Вот кое-что, с чего можно начать. Класс Screen Image упрощает создание изображений компонента. Обратите внимание, что вам также понадобится создать изображения для значков «ролловер». Это можно сделать, установив метод ButtonModel.setRollover (true) для нормального и выбранного состояний переключателя.

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;

public class RadioButtonScale extends JFrame
{
    private static void createAndShowGUI()
    {
        JPanel north = new JPanel(new FlowLayout(0, 0, FlowLayout.LEFT));

        JRadioButton button = new JRadioButton("Radio Button");
        north.add(button);

        JPanel south = new JPanel();
        JLabel west = new JLabel();
        west.setBorder(new LineBorder(Color.GREEN));
        south.add(west, BorderLayout.WEST);
        JLabel east = new JLabel();
        east.setBorder(new LineBorder(Color.GREEN));
        south.add(east, BorderLayout.EAST);

        //  Create images of radio button icon

        Icon icon = UIManager.getIcon("RadioButton.icon");
        Dimension preferred = button.getPreferredSize();
        Insets insets = button.getInsets();
        int height = preferred.height - insets.top - insets.bottom;
//      Rectangle r = new Rectangle(insets.left, insets.top, height, height);
        Rectangle r = new Rectangle(insets.left, insets.top, icon.getIconWidth(), height);

        west.setIcon( new ImageIcon( ScreenImage.createImage(button, r) ) );
        button.setSelected(true);
        east.setIcon( new ImageIcon( ScreenImage.createImage(button, r) ) );

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(north, BorderLayout.NORTH);
        frame.add(south, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
2 голосов
/ 06 апреля 2010

Если вы разрабатываете только для платформы Mac (на основе вашего снимка экрана) Вы можете рассмотреть возможность использования клиентских свойств Apple "mini"

component.putClientProperty("JComponent.sizeVariant", "mini");

как показано по этой ссылке:

http://developer.apple.com/mac/library/technotes/tn2007/tn2196.html#SIZE_EXAMPLES

0 голосов
/ 14 октября 2012

Не знаю, правильно ли я понял реальный вопрос, но ... Почему бы не создать изображение GIF для переключателя или увеличить текущее изображение?Загрузите его с ImageIcon g = new ImageIcon(NAME OF FILE).Затем присвойте его переключателю с помощью nameOfRadioButton.setIcon(g);

0 голосов
/ 06 апреля 2010

Имея ImageIcon, вы можете получить новый масштабированный экземпляр следующим образом:

    ImageIcon original = ...;

    Image img = original.getImage();
    Image scaledImage = img.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT));
    ImageIcon newInstance = new ImageIcon(scaledImage);

Обратите внимание, что многократное масштабирование изображения ухудшает качество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...