2017-11-27 12 views
0

이 코드에 몇 가지 문제가 있습니다. 메뉴 항목을 클릭하면 내 actionListener가 작동하지 않습니다. 코드에 문제가 있다고 생각합니다. 여기서 나는 그것을 대담하게하려고 노력했습니다 (**). 특히 앱의 왼쪽에 메뉴가 필요합니다. 필자는 직접 작성할 수 없으므로이 예제를 Java GUI에서 사용하고 편집했습니다. 중요한 것은 말하자면, 항목을 마우스로 가리키면 해당 항목이 표시되지 않습니다. 정상적인 텍스트와 같습니다. 내 결과를 얻기 위해 내가해야 할 조언이 있니?JMenuBar에서 ActionListeners가 작동하지 않습니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


public class MainSite implements ActionListener 
{ 

    private JMenuItem menu1 = new JMenuItem("menu 1"); 
    private JMenuItem menu2 = new JMenuItem("menu 2"); 
    private JMenuItem menu3 = new JMenuItem("menu 3"); 
    private JMenuItem menu4 = new JMenuItem("menu 4"); 

    public JMenuBar createMenuBar() 
    { 
     JMenuBar menuBar = new JMenuBar(); 

     menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.PAGE_AXIS)); 
     menuBar.add(menu1); 
     menuBar.add(menu2); 
     menuBar.add(menu3); 
     menuBar.add(menu4); 
     menuBar.setBorder(BorderFactory.createMatteBorder(0,0,0,1, 
                  Color.BLACK)); 
     return menuBar; 
    } 

    **private static void createAndShowGUI() 
    { 

     JFrame F = new JFrame("App"); 
     F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Create and set up the content pane. 
     MainSite demo = new MainSite(); 
     Container contentPane = F.getContentPane(); 
     contentPane.setBackground(Color.WHITE); 
     contentPane.add(demo.createMenuBar(), 
         BorderLayout.LINE_START); 


     F.setSize(640,420); 
     F.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    }** 

    @Override 
    public void actionPerformed(ActionEvent E) { 

     if(E.getSource() == menu1) 
     { 
      System.out.println("gnskfs"); 
     } 

     if(E.getSource() == menu2) 
     { 
      System.out.println("gsdfogjs"); 
     } 

     if(E.getSource() == menu3) 
     { 
      System.out.println("gfsjdkljgs"); 
     } 

     if(E.getSource() == menu4) 
     { 
      System.out.println("hfsdajhg"); 
     } 
    } 
} 

답변

0

당신은 메뉴 항목에 ActionListener를 추가하지 않습니다

menu1.addActionListener(this): 
... 

또한, 메뉴 바는 콘텐츠 패널에 추가 할 수 없습니다. 메뉴 막대에 예약 된 프레임에는 특별한 영역이 있습니다. setJMenuBar(...) 메서드를 사용하여 메뉴 막대를 프레임에 추가합니다.

시작하기위한 실용 예제는 How to Use Menus의 스윙 튜토리얼의 섹션을 읽으십시오.

+0

내가 간과 한 이유는 그들이 작동하지 않았기 때문입니다. 감사합니다. – Dave