2011-09-27 2 views
2

ただ発射されないマウスホイールイベントが発生しました。 swt_awtブリッジを使用しているので、RCPアプリケーションでswingコンポーネントを使用することができます。私は見つけられたすべてをテストしましたが、成功しませんでした。私のアプリケーションは非常に複雑なので、簡単なバージョンの問題を作成しました。これは、あなたが私を助けてくれるかどうかを推測するのにも役立ちます。SWT-AWTコンポーネントでMouseWheelイベントが発生しない

この単純化された問題は、私のテキストエリア(またはスクロールペイン)がマウスイベントをキャッチすることです。しかし、これらの出来事は失われます。

import java.awt.Frame; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseWheelEvent; 
import java.awt.event.MouseWheelListener; 

import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.awt.SWT_AWT; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.List; 
import org.eclipse.swt.widgets.Shell; 


public class Main { 

    protected Shell shell; 

    /** 
    * Launch the application. 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      Main window = new Main(); 
      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("SWT Application"); 
     shell.setLayout(new GridLayout(3, false)); 

     List list = new List(shell, SWT.BORDER); 
     list.setLayoutData(new GridData(GridData.FILL_VERTICAL)); 
     list.add("Something"); 

     Composite composite = new Composite(shell, SWT.EMBEDDED); 
     composite.setLayoutData(new GridData(GridData.FILL_BOTH)); 
     Frame graphFrame = SWT_AWT.new_Frame(composite); 
     final JTextArea textarea = new JTextArea(60, 80); 
     JScrollPane scrollpane = new JScrollPane(textarea); 
     graphFrame.add(scrollpane); 

     textarea.addMouseListener(new MouseListener() { 

      @Override 
      public void mouseClicked(MouseEvent arg0) { 
       textarea.setText(textarea.getText() + "Mouse clicked.\n\r"); 
      } 

      @Override 
      public void mouseEntered(MouseEvent arg0) { 
       textarea.setText(textarea.getText() + "Mouse is in.\n\r"); 
      } 

      @Override 
      public void mouseExited(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void mousePressed(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void mouseReleased(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

     }); 

     textarea.addMouseWheelListener(new MouseWheelListener() { 
      @Override 
      public void mouseWheelMoved(MouseWheelEvent arg0) { 
       textarea.setText(textarea.getText() + "Mouse wheel activated.\n\r"); 
      } 

     }); 
    } 
} 

編集:私が見つけた、そのパネルは、しかし、JComponentのを拡張するすべてのクラスは、(ちょうど私のコンポーネントと同様ん)何とかこれらのイベントを失う、AWTイベントをキャッチすることができます。 私はJComponentをクリックした後に私のswtコンポジットにforceFocusする醜いハックを作りました。その後、私は少なくともswtイベントを聞くことができ、swtイベントリスナーから直接JComponentで作業できます。私はまだ、JComponent上でawtマウスイベントを直接捕捉することができるソリューションを評価しています。

答えて

関連する問題