当我向JMenuItem
添加图标时,它会缩放到图标的大小。看到这里的区别:
我可以以某种方式强迫它缩小到原始状态吗?如果没有,JMenuItem
是否有默认的图标大小(意味着,当它完全适合Test1,2,3&s;的图标插槽时,图标的大小会是多少?)
答案 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(..,..));
但问题是该图标无法缩放,它将如下所示:
这是我写的简单演示:
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
上的缩放图标:
答案 1 :(得分:1)
是JMenuItem的默认图标大小
我想您可以查看用于JCheckBoxMenuItem
和JRadioButtonMenuItem
的图标的大小,以查看这些图标的大小。
您可以使用UIManager:
Icon icon = UIManager.getIcon("RadioButtonMenuItem.checkIcon");
Icon icon = UIManager.getIcon("CheckBoxMenuItem.checkIcon");