我正在使用Swing中的Touch用戶界面。雖然我知道這不是最佳的,但我只是在一個很短的截止日期,沒有時間觸摸特定的GUI軟件包(如果有的話)。Java Swing中的MouseMotionListener,使用它與組件內部的組件等
我希望我的用戶能夠在屏幕上「滑動」他們的手指,並且我製作的特殊JScrollPane的視圖也隨之移動。 的代碼非常簡單 -
public class PanScrollPane extends JScrollPane implements MouseMotionListener{
public PanScrollPane() {
super();
this.addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent arg0) {
System.out.println("Mouse Dragged!");
}
@Override
public void mouseMoved(MouseEvent arg0) {
System.out.println("Mouse Moved!");
}
我遇到的問題是,JScrollPane的是各種JComponents的容器。當我第一次開始研究這個時,我認爲MouseMovedEvent和MouseDraggedEvent會向上傳播'GUI樹',直到他們遇到一個具有特定於該事件的偵聽器的Component。現在看來,我添加到panScrollPane的任何組件都會阻止任何這些MouseMotion事件,使我無法平移。
panScrollPane.add(new JButton("This thing blocks any mouse motion events"));
我想通手傳播的MouseEvent(添加聽衆每一個部件,然後讓他們的事件發送到他們的父母)會工作。但是,這是一項非常耗時的工作,因爲我寧願花時間處理其他事情,所以我想知道您是否有任何人知道解決此問題的方法。
感謝您的閱讀,並希望謝謝您的回答! :)
編輯:使我的意圖更清晰。我只希望mousemotion事件被panPanel捕獲,任何其他事件(如MouseClick,MouseRelease)都應該正常處理
看起來很有希望,但玻璃窗會「捕捉」我感興趣的「捕捉」事件(MouseMotion的事件)還是每一個可能的事件? –
對,教程代碼展示瞭如何讓它傳播任何剩餘的事件,我會用這個玻璃窗格來測試:)謝謝! –
@Erwin您可以將MouseInputAdapter作爲mouseListner添加到父級以偵聽拖動事件。其他事件,我認爲只會通過它發送給子組件。 –