我有一個不同的問題,第一個,所以我發了這個帖子: Java JPanel mouse listener doesn't work over its componentsJava的玻璃疼痛(這不是一個錯字)
的回答使我在一個Java玻璃面板到達。我看到了關於此的其他帖子,他們都指向這篇文章: http://weblogs.java.net/blog/alexfromsun/archive/2006/09/a_wellbehaved_g.html。
我使用的物品(FinalGlassPane.java)的例子,準確地將它設置爲測試程序:
GlassPane glass = new GlassPane(this);
getRootPane().setGlassPane(glass);
GestureListener gl = new GestureListener();
glass.addMouseMotionListener(gl);
glass.addMouseListener(gl);
glass.setVisible(true);
if (glass instanceof AWTEventListener) {
AWTEventListener al = (AWTEventListener) glass;
Toolkit.getDefaultToolkit().addAWTEventListener(al,
AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
}
但我仍然有同樣的問題,玻璃阻止我能點擊它下面的任何按鈕(JButton)。
如果您已經足夠閱讀我最初的SO問題,並認爲glassPane不適合我,請寄給我一個替代解決方案,否則請告訴我爲什麼這不起作用。
在此先感謝。
編輯:IT工作,但停止工作時添加自己的MouseListener
請注意,在我的代碼,我將我自己的GestureListener
,我不能添加自己的MouseListener此實現 - 這是什麼使得它不行。我將這些線路關閉,現在玻璃窗格正常工作。
在代碼(FinalGlassPane.java)中有關於MouseListener的我不太瞭解的通知,所以我的新問題是如何將我自己的MouseListener添加到此玻璃窗格中?
/**
* If someone adds a mouseListener to the GlassPane or set a new cursor
* we expect that he knows what he is doing
* and return the super.contains(x, y)
* otherwise we return false to respect the cursors
* for the underneath components
*/
@Override
public boolean contains(int x, int y) {
if (getMouseListeners().length == 0 && getMouseMotionListeners().length == 0
&& getMouseWheelListeners().length == 0
&& getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) {
return false;
}
return super.contains(x, y);
}
附加信息:
如果我總是返回在contains(int, int)
方法的按鈕總是工作假的,但我對玻璃面板的MouseListener沒有。如果我總是返回「super.contains(x,y)」,則會發生相反情況:GlassPane上的MouseListener可以正常工作,但我無法單擊下面的任何組件。
最後編輯 所以,我得出的結論,我不能(或沒有),有一種方法(與Java 6)讓我的應用程序有2層,可接收的MouseListener事件(的mousePressed, mouseReleased)在同一時間。最後,我在原始問題上使用瞭解決方案,即創建一個自定義JButton,並將MouseListener添加到每個實例。
能你放棄玻璃(痛苦)的想法添加一個主監聽器到所有的按鈕?你的應用程序會遇到這種情況嗎? – Java42 2012-03-22 00:31:26
實際上,在我的應用程序中,因爲按鈕(按鈕的網格)是從XML文件生成的,或者有時是從用戶對象生成的。將監聽器添加到每個按鈕都是一個很大的麻煩,而且我甚至不確定我的監聽器能否正常工作。 – Ozzy 2012-03-22 00:35:05
@ChuckFricano有什麼建議嗎? – Ozzy 2012-03-22 00:49:52