强制 JMenuItem 大小

use*_*542 3 java swing jmenuitem imageicon

当我将图标添加到 时JMenuItem,它会放大到图标的大小。看看这里的区别:

问题

我可以以某种方式强制它缩小到原来的大小吗?如果没有,是否有默认的图标大小JMenuItem(也就是说,当图标完全适合 Test1、2、3 的图标槽时,图标的大小是多少)?

Ist*_*tso 6

解决此问题的一种方法是重新缩放图标本身:

 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
Run Code Online (Sandbox Code Playgroud)

然后你将这个新的调整大小的图标设置为你的JMenuItem

JMenuItem *事实上,您可以通过声明强制大小:

.setPreferredSize(new Dimension(..,..));
Run Code Online (Sandbox Code Playgroud)

但问题是图标不会缩放,它看起来像下面这样:

在此输入图像描述

这是我写的简单演示:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

原始图标的大小:

在此输入图像描述

上的缩放图标JMenuItem

在此输入图像描述