2014-08-31 3 views
2

Когда я добавляю значок в JMenuItem, он масштабируется до размера значка. Чувствуете разницу здесь:Force JMenuItem size

The problem

Могу ли я каким-то образом заставить его свернуть вниз к оригиналу? Если нет, есть ли размер значка по умолчанию для JMenuItem (что означает размер значка, когда он идеально подойдет в слот для значков Test1,2,3)?

ответ

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

есть размер значка по умолчанию для JMenuItem

Я думаю, вы могли бы взглянуть на размер значков, используемых для JCheckBoxMenuItem и JRadioButtonMenuItem, чтобы увидеть, что размер этих иконки.

Вы можете использовать UIManager для этого:

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

 Смежные вопросы

  • Нет связанных вопросов^_^