добавете икона и текст в JMenu в swing

Работя върху люлки. Трябва да създам основен екран, състоящ се от 10 менюта. Създадох формата от JFrame и меню от JMenu. Сега това меню трябва да съдържа както текст, така и изображение и методът за извършване на действие трябва да се извика при щракване върху менюто, така че действието да може да се извърши при щракване върху бутона на менюто.

В момента правя Jmenu с JMenuItem и икона върху иконата на изображението, но искам менюто с икона и текст

текущият ми код е

public class MenuScreen  extends JFrame implements ActionListener{

             Container cp;
             JMenuBar menuBar;

             JLabel logo;
                public MenuScreen() {
                    super("");
                    cp=this.getContentPane();
                    cp.setBackground(Color.gray);

                    menuBar= new JMenuBar();
        logo=new JLabel(im);
                cp.add(logo);
                    logo.setBounds(100,80,500,350);

            helpmenu= new JMenu(" Help  ");
        homemenu=new JMenu(" Home  ");
        fieldsmenu= new JMenu(" Fields  ");
        backmenu= new JMenu(" Back  ");
        forwardmenu= new JMenu(" Forward  ");
        panelmenu= new JMenu(" Panel  ");
        searchmenu= new JMenu(" Search  ");
        quickmenu= new JMenu(" Quick  ");
        infomenu= new JMenu(" Info  ");
        exitmenu= new JMenu(" Exit  ");
        mastermenu= new JMenu(" Master  ");
        tarrifmenu= new JMenu(" Tarrif  "); 
        contactmenu= new JMenu(" Contact  ");
        webmenu= new JMenu(" Web  ");
        wordmenu= new JMenu(" Word  ");
        legaldictionarymenu= new JMenu(" LegalDictionary  ");
        budgetmenu=new JMenu(" Budget 2012 2013  ");
        memberdetailmenu= new JMenu(" Member Details  ");


        Font f1= new Font("Arial",Font.BOLD,16);

        budgetmenu.setFont(f1);
        legaldictionarymenu.setFont(f1);
        helpmenu.setFont(f1);

        JMenuItem backmenuitem= new JMenuItem(backicon);
        backmenu.add(backmenuitem);


        JMenuItem exitmenuitem= new JMenuItem(exiticon);
        exitmenu.add(exitmenuitem);

        menuBar.add(helpmenu);
        menuBar.add(homemenu);
        menuBar.add(fieldsmenu);
        menuBar.add(backmenu);
        menuBar.add(forwardmenu);
        menuBar.add(panelmenu);
        menuBar.add(searchmenu);
        menuBar.add(quickmenu);
        menuBar.add(infomenu);
        menuBar.add(exitmenu);
        menuBar.add(mastermenu);
        menuBar.add(tarrifmenu);
        menuBar.add(contactmenu);
        menuBar.add(webmenu);
        menuBar.add(wordmenu);
        menuBar.add(legaldictionarymenu);
        menuBar.add(budgetmenu);
        menuBar.add(memberdetailmenu);

        setJMenuBar(menuBar);

    /*
     Adding Listeners to the menus where required 

     */
            searchmenu.addActionListener(this);

    }

    public void actionPerformed(ActionEvent ae)
    {
     JOptionPane.showMessageDialog(null,"clicked");
          if(ae.getActionCommand().equals("Search"))
          {

           SearchForm frm=new SearchForm();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
          frm.setBounds(0,0,screenSize.width, screenSize.height);
          frm.setVisible(true);


          }           

    }

   public static void main(String args[])
{

       MenuScreen frm= new MenuScreen();

       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
       frm.setBounds(0,0,screenSize.width, screenSize.height);
       frm.setVisible(true);
}
}

Моля, помогни ми.


person ADESH RAJPUT    schedule 21.09.2012    source източник
comment
Моля, използвайте последователен и логичен отстъп за кодови блокове. Кодът във въпросите е много по-полезен, ако е четим. С начина, по който този код е отстъпен, мога да прочета закуската на кучето си по-лесно.   -  person Andrew Thompson    schedule 21.09.2012
comment
Няколко съвета 1) Ако въпросът е „как да добавя икона и текст към елемент от менюто?“ добавете код, който съдържа едно меню с един елемент от менюто, а не 10 менюта и над 100 реда код. 2) logo.setBounds(100,80,500,350); Не правете това, това ще създаде проблеми по-късно. Вместо това използвайте оформления (с подложки и граници).   -  person Andrew Thompson    schedule 21.09.2012


Отговори (3)


Използвайте конструктора JMenuItem(String text, Icon icon)
Ако искате JMenu с икона и текст, направете

helpmenu= new JMenu(" Help  ");
helpmenu.setIcon(..);
person basiljames    schedule 21.09.2012
comment
благодаря, показва иконата преди текста, но искам текст под иконата означава икона отгоре и текст под икона и събитието за щракване трябва да се извърши с Jmenu - person ADESH RAJPUT; 21.09.2012
comment
@ADESHRAJPUT, моля, прочетете главата за това как да използвате JMenu/Items в урока, посочен в wiki на swing-tag - обикновените api въпроси са скучни за помощниците и не ви помагат прекалено много ... в края на деня , ще трябва да научите API, който използвате, и това в крайна сметка може да стане само като го прочетете :-) - person kleopatra; 21.09.2012

- За JMenuItem използвайте JMenuItem((String text, Icon icon) конструктор,

- А за JMenu опитайте да използвате конструктора, който приема низ като аргумент JMenu(String s) и метод setIcon()

За задаване на специални клавишни опции в елементите на менюто използвайте setAccelerator()

Например:

myItem.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));

person Kumar Vivek Mitra    schedule 21.09.2012

Задайте иконата и текста във вашия Action, който поставяте в менюто (използвайки механизма за двойка ключ-стойност). Ключовете са дефинирани в интерфейса Action.

javadoc на класа на интерфейса Action също съдържа хубава таблица с преглед на наличните ключове и какво засягат.

person Robin    schedule 21.09.2012