当我向一个JMenuItem添加一个图标时,它会被放大到图标的大小。请看这里的区别:

我能让它缩小到原版吗?如果没有,JMenuItem是否有默认的图标大小(也就是说,当图标完全适合测试1、2、3的图标槽时,它的大小是多少)?
发布于 2014-08-31 18:00:53
解决这一问题的一种方法是重新建立图标本身:
ImageIcon i = new ImageIcon((getClass().getResource("new.png")));
Image image = i.getImage(); // transform it
Image newimg = image.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way
i = new ImageIcon(newimg); // transform it back然后将这个新的调整大小的图标设置为JMenuItem:
*实际上,您只需声明JMenuItem的大小:
.setPreferredSize(new Dimension(..,..));但问题是图标不会被缩放,它看起来如下所示:

下面是我写的简单演示:
public class SwingMenuDemo {
private JFrame mainFrame;
public SwingMenuDemo() { prepareGUI(); }
public static void main(String[] args) {
SwingMenuDemo swingMenuDemo = new SwingMenuDemo();
swingMenuDemo.showMenuDemo();
}
private void prepareGUI() {
mainFrame = new JFrame("Java SWING Examples");
mainFrame.setSize(400, 400);
mainFrame.setVisible(true);
}
private void showMenuDemo() {
//create a menu bar
final JMenuBar menuBar = new JMenuBar();
//create menus
JMenu fileMenu = new JMenu("File");
//create menu items
JMenuItem test1 = new JMenuItem("test1");
JMenuItem test2 = new JMenuItem("test2");
JMenuItem test3 = new JMenuItem("test3");
JMenuItem test4 = new JMenuItem("test4");
ImageIcon i = new ImageIcon((getClass().getResource("new.png")));
Image image = i.getImage(); // transform it
Image newimg = image.getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way
i = new ImageIcon(newimg); // transform it back
test4.setIcon(i);
fileMenu.add(test1);
fileMenu.add(test2);
fileMenu.add(test3);
fileMenu.add(test4);
menuBar.add(fileMenu);
//add menubar to the frame
mainFrame.setJMenuBar(menuBar);
mainFrame.setVisible(true);
}
}原始图标的大小:

JMenuItem上的缩放图标:

发布于 2014-08-31 19:10:00
JMenuItem有默认的图标大小吗?
我想您可以看看JCheckBoxMenuItem和JRadioButtonMenuItem使用的图标的大小,看看这些图标的大小。
您可以为此使用UIManager:
Icon icon = UIManager.getIcon("RadioButtonMenuItem.checkIcon");
Icon icon = UIManager.getIcon("CheckBoxMenuItem.checkIcon");https://stackoverflow.com/questions/25593949
复制相似问题