强制JMenuItem大小

时间:2014-08-31 16:25:37

标签: java swing imageicon jmenuitem

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

The problem

我可以以某种方式强迫它缩小到原始状态吗?如果没有,JMenuItem是否有默认的图标大小(意味着,当它完全适合Test1,2,3&s;的图标插槽时,图标的大小会是多少?)

2 个答案:

答案 0 :(得分:3)

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

 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(..,..));

但问题是该图标无法缩放,它将如下所示:

enter image description here

这是我写的简单演示:

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

原始图标的大小:

enter image description here

JMenuItem上的缩放图标:

enter image description here

答案 1 :(得分:1)

  

是JMenuItem的默认图标大小

我想您可以查看用于JCheckBoxMenuItemJRadioButtonMenuItem的图标的大小,以查看这些图标的大小。

您可以使用UIManager:

Icon icon = UIManager.getIcon("RadioButtonMenuItem.checkIcon");
Icon icon = UIManager.getIcon("CheckBoxMenuItem.checkIcon");