2014-07-17 40 views
0

訪問processMouseMotionEvent我試圖在JFrame中的組件中模擬鼠標,並且我遇到了processMouseMotionEvent。據說我可以通過一個MouseEvent這個,它將處理組件中的MouseEvent。我試過,但我得到一個錯誤:無法從組件

processMouseMotionEvent(MouseEvent) has protected access in JComponent.

我把它,這意味着我這樣做是錯誤的,我不應該被使用如何,我的方法是什麼?這是我目前代碼的一個片段。如果不行的話,我還能如何處理一個模擬的MouseEvent?

JWebBrowser j = new JWebBrowser(); 
j.setBounds(0, 0, 1000, 1000); 
j.processMouseMotionEvent(new MouseEvent(this, 0, 0, 0, 5, 5, 2, false)); //ERROR 
panel.add(j); 
+1

這聽起來像你試圖重新/派遣事件手冊。看看[這個例子](http://stackoverflow.com/questions/21449502/passing-the-click-event-on-one-jpanel-to-another-jpanel/21468973#21468973) – MadProgrammer

回答

2

錯誤的含義正是它所說的 - 您試圖通過外部類調用受保護的方法,因爲它不可訪問,不可見。我不知道你想要做什麼是一個可行的計劃,但無論如何,如果你需要訪問一個繼承的受保護方法,那麼你應該考慮創建一個公共包裝方法,外部對象可以調用並調用你的受保護方法方法。

例如,

// or whatever you're extending... 
public class MyFoo extends JComponent { 

    // the wrapper method *must* be public 
    public void processMouseMotionEventWrapper(MouseEvent mEvt) { 
     processMouseMotionEvent(mEvt); 
    } 
} 

同樣,我不能爲是否使用這種方法,您說是因爲我從來沒有用過它是一個好主意。

+0

好吧我已經完成了,但是我怎麼稱它爲JComponent?就像不用'j.processMouseMotionEvent ...',我不能做'j.MouseWrapper',我該怎麼做? – Nathan

+0

@Nathan:我不確定我理解你的問題。包裝只能在擴展類中使用。 –

+0

這種方法不需要組件嗎?像j.setBounds一樣,沒有j,它並不代表太多。如果我打電話給我的包裝,根本沒有提到j,那麼該程序如何知道如何處理該組件的特定鼠標?或者這不重要? – Nathan