在JRadioButton中更改ImageIcon的大小

4

我只想改变我的JRadioButton的实际(默认)ImageIcon的大小(直径)。我已经改变了小部件中显示的字体大小,所以这样一个大的单选按钮看起来真的很傻。

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

这给了我一个巨大的按钮:

巨大的按钮!

我真的必须创建自己的ImageIcon吗?还是可以在不太麻烦的情况下缩放默认的ImageIcon


令人惊讶的是,最终SWING没有给出这个简单问题的答案。你有我的支持。 - Federico Giorgi
4个回答

3

没有将图标添加到JRadioButton中。UI会根据需要绘制图标,因此您不能使用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

0

给定一个ImageIcon,您可以按如下方式派生一个新的缩放实例:

    ImageIcon original = ...;

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

请注意,反复缩放图像会降低其质量。

当调用ImageIcon的getImage()时,我遇到了一个空指针异常。我的JRadioButton通过调用getIcon()返回一个图标,而不是ImageIcon,所以我进行了强制转换,这可能与此有关?编辑:由于某种原因,我的JRadioButtons的图标似乎为空... - Frederik Wordenskjold

0

不知道我是否理解了实际问题,但是为什么不为单选按钮创建一个gif图像,或者放大当前的图像?使用ImageIcon g = new ImageIcon(FILE的名称)加载它。然后,使用nameOfRadioButton.setIcon(g)将其分配给单选按钮;


看起来问题是如何通过编程进行更改,而不是如何使用图片进行更改。 - JNF
因为你想使用LAF使用的图标,只是更小一些;-) @jonsca没有理由点赞...它根本没有回答问题... - kleopatra
它已经通过了“第一答案”队列,所以很可能被另一个用户投票支持。 - jonsca
谢谢,我还没有看到那个 :-) 然后我的评论给@JNF ... 和-1 - kleopatra
哈奇...看来我之前没有看到你的评论,好像有点瞎了;-)谢谢。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接