ただ発射されないマウスホイールイベントが発生しました。 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マウスイベントを直接捕捉することができるソリューションを評価しています。