2016-09-08 11 views
0

MenuItemをクリックしてメソッドを呼び出そうとしているので、(基本的に)別のウィンドウが開きます。MenuItemでメソッドをトリガーする

私の標準的なアプローチは、これを使用することになります

 mntmAbout.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
      About.main(null); 
      } 
     }; 

MenuItemであるmntmAboutで。しかし、これは可能ではありません。日食はaddActionListenerがタイプMenuItemの既知の方法ではないことを私に警告しているからです。

WindowBuilderでUIを設計してクラス全体を構築したので、JMenuItemの代わりにMenuItemを扱っているので、この機能に必要な別のメソッドがあると思います。クラスの

完全なソースを(私はここで完全に異なる何かを逃しAMまたは):

package kingfisher; 

import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.custom.CLabel; 
import org.eclipse.swt.SWT; 
import org.eclipse.wb.swt.SWTResourceManager; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.ToolBar; 
import org.eclipse.swt.widgets.ToolItem; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.widgets.Menu; 
import org.eclipse.swt.widgets.MenuItem; 
import java.awt.event.*; 


public class ControlPanel { 

    protected Shell shell; 

    /** 
    * Launch the application. 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      ControlPanel window = new ControlPanel(); 
      window.open(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Open the window. 
    */ 
    public void open() { 
     Display display = Display.getDefault(); 
     createContents(); 
     shell.open(); 
     shell.layout(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
    } 

    /** 
    * Create contents of the window. 
    */ 
    protected void createContents() { 
     shell = new Shell(); 
     shell.setSize(450, 300); 
     shell.setText("Control Panel"); 

     CLabel lblNewLabel = new CLabel(shell, SWT.NONE); 
     lblNewLabel.setImage(SWTResourceManager.getImage(ControlPanel.class, "/kingfisher/rsz_1rsz_icon.png")); 
     lblNewLabel.setBounds(97, 10, 256, 200); 
     lblNewLabel.setText(""); 

     Label lblNewLabel_1 = new Label(shell, SWT.SHADOW_IN | SWT.CENTER); 
     lblNewLabel_1.setBounds(194, 216, 61, 17); 
     lblNewLabel_1.setText("Kingfisher"); 

     Menu menu = new Menu(shell, SWT.BAR); 
     shell.setMenuBar(menu); 

     MenuItem mntmControl = new MenuItem(menu, SWT.CASCADE); 
     mntmControl.setText("Control"); 

     Menu menu_1 = new Menu(mntmControl); 
     mntmControl.setMenu(menu_1); 

     MenuItem mntmQuit = new MenuItem(menu_1, SWT.NONE); 
     mntmQuit.setText("Quit"); 

     MenuItem mntmWindows = new MenuItem(menu, SWT.CASCADE); 
     mntmWindows.setText("Windows"); 

     Menu menu_2 = new Menu(mntmWindows); 
     mntmWindows.setMenu(menu_2); 

     MenuItem mntmChat = new MenuItem(menu_2, SWT.NONE); 
     mntmChat.setText("Chat"); 

     MenuItem mntmContacts = new MenuItem(menu_2, SWT.NONE); 
     mntmContacts.setEnabled(false); 
     mntmContacts.setText("Contacts"); 

     MenuItem mntmSettings = new MenuItem(menu_2, SWT.NONE); 
     mntmSettings.setEnabled(false); 
     mntmSettings.setText("Settings"); 

     MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE); 
     mntmHelp.setText("Help"); 

     Menu menu_3 = new Menu(mntmHelp); 
     mntmHelp.setMenu(menu_3); 

     MenuItem mntmAbout = new MenuItem(menu_3, SWT.NONE); 
     //HERE BE CODE 
     mntmAbout.setText("About"); 

    } 
} 

答えて

2

はSWTのためには、addSelectionListener

mntmAbout.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(final SelectionEvent event) 
    { 
    // TODO Your code 
    } 
}); 

SWTはスイング/ AWTとは全く異なるツールキットで、java.awtでのコードのいずれかを使用しません使用しています。

+0

ありがとう、ちょうど私が探していたthats – sam4ritan

0

SWTとSwingは異なるツールキットです。これらは、異なるイベント・キューとリスナー・タイプを使用します。 JavaDocを確認してください。

+0

リンクありがとうございます。それは助けられましたが、私はまだ失われています。私は、SWTやそれに伴うすべての経験はそれほどありません。デモンストレーションするためのサンプルコードスニペットを提供できますか?あなたが実際の仕事をするときにいつも理解しやすくなりました。 – sam4ritan

関連する問題