2014-02-08 96 views
2

從它的內容區域拖動一個jframe窗口很簡單,但這裏是問題所在。 當我在框架上添加標籤時,即使拖動標籤 仍然可以,但是當我爲標籤添加mouseclicked事件時,即使沒有代碼實際在適配器中執行,拖動也不會發生在我拖動標籤,但拖動窗口的其餘區域是好的。從內容區域拖動/移動JFrame/JDialog窗口

另一件事是我想讓窗口的不透明度隨鼠標移動而變化, 與this.setOpacity(0.9f); 標籤的鼠標點擊事件設置後,標籤也不會對此作出響應。

任何人都知道如何解決這個問題?

private void formMousePressed(java.awt.event.MouseEvent evt) { 
    offsetX = evt.getX(); 
    offsetY = evt.getY(); 
} 

private void formMouseDragged(java.awt.event.MouseEvent evt) { 
    java.awt.Component c = (Component) evt.getSource(); 
    c.setLocation(evt.getXOnScreen() - offsetX, evt.getYOnScreen()- offsetY); 
} 

private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) { 
    // nothing actually done in the Label's mouse handler 
} 

private void formMouseEntered(java.awt.event.MouseEvent evt) { 
    this.setOpacity(0.9f); 
} 

private void formMouseExited(java.awt.event.MouseEvent evt) { 
    this.setOpacity(0.4f); 
} 
+2

我看到幾個問題。選擇**一個**並使[複製問題的最小,完整,測試和可讀示例](http://stackoverflow.com/help/mcve),以便我們可以測試。 –

+0

'// TODO在這裏添加你的處理代碼:'一旦你添加了一些處理代碼或評論,爲什麼它沒有被實現,刪除這些註釋!他們是噪音。 –

+0

你想要做的事情可以在'JGlassPane'中更好地實現。您不必爲'JFrame'中的每個組件編寫監聽器。您只需爲'JGlassPane'編寫一個鼠標偵聽器,然後在其中實現不透明度更改代碼和'jframe'移動代碼。 –

回答

2

它仍然是好的,甚至在標籤上拖動,但是當我在標籤中添加的mouseClicked事件,甚至無碼實際上是在適配器處理連線

正確,的MouseEvent只傳遞給一個組件,所以標籤可以阻止事件傳遞給窗口。

因此,您需要將MouseListener添加到窗口和標籤以拖動窗口。

結賬Moving Windows。它是一個監聽器,它允許您將任何組件相對於其父組件移動。因此,您可以創建ComponentMover,然後註冊窗口的根窗格以允許您拖動窗口。但是你也需要註冊標籤。

+0

camickr,非常感謝!這個班很酷!我現在可以隨任何組件移動,但不透明度設置僅在進入/退出窗口時有效,但不能與標籤一起工作,對此有何看法? –

+0

好吧,很酷,加入mouseEntered/mouseExited,我可以做不透明的事情。非常感謝! –