gpt4 book ai didi

java - MouseWheel 事件不会在 SWT-AWT 组件中触发

转载 作者:行者123 更新时间:2023-11-30 11:51:15 26 4
gpt4 key购买 nike

我卡在了鼠标滚轮事件中,它只是没有触发。我使用 swt_awt 桥,所以我可以在我的 RCP 应用程序中使用 swing 组件。我测试了我能找到的所有东西,但没有成功。因为我的应用程序非常复杂,所以我创建了一个简化版本的问题,如果您想帮助我,它也应该可以帮助您确定方向。

现在这个简化的问题是,我希望我的文本区域(或滚动 Pane )捕捉鼠标滚轮事件。但是这些事件丢失了。

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");
}

});
}
}

编辑:我发现 Panel 能够捕获 awt 事件,但是任何扩展 JComponent 的类(就像我的组件所做的那样)都会以某种方式释放这些事件。我还设法创建了一个丑陋的 hack,在我单击我的 JComponent 后,我​​在我的 swt 组合上强制聚焦。然后我至少可以直接从 swt 事件监听器监听 swt 事件并使用我的 JComponent。我仍然希望能够直接在 JComponent 上捕获 awt 鼠标事件的解决方案。

最佳答案

您可能遇到了这个问题:http://code.google.com/p/gama-platform/issues/detail?id=84 . http://code.google.com/p/gama-platform/issues/detail?id=84#c13 中描述了解决方法(链接到这个问题)。

关于java - MouseWheel 事件不会在 SWT-AWT 组件中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com