是否可以獲取JLabel添加到的面板的名稱? 我添加了一些JLabel到不同的JPanels,我想調用不同的鼠標事件,根據jLabel放置在哪個面板上。JLabel - 獲取父面板?
回答
如果您運行label.getParent()
它將返回標籤所在的面板。
然後,您可以致電parent.getName()
,但事實上,您現在將擁有可能不需要的對象。
,最簡單的方式做到這一點:
//label1 and label2 are JLabel's
//panel1 and panel2 are JPanel's
doActionsForLabel(label1);
doActionsForLabel(label2);
public void doActionsForLabel(JLabel label)
{
if (label.getParent() == panel1)
{
//do action #1
}
else if (label.getParent() == panel2)
{
//do action #2
}
}
上面的代碼假定標籤是JPanels的直接孩子。然而,情況並非總是如此,有時他們是專家組的曾孫或曾孫。如果是這種情況,你將會做一些稍微複雜的操作來遍歷父層次結構。
public void doActionsForLabel(JLabel label)
{
boolean flag = true;
Component parent = label;
while (flag)
{
parent = parent.getParent();
if ((parent != null) && (parent instanceof JPanel))
{
if (label.getParent() == panel1)
{
//do action #1
}
else if (label.getParent() == panel2)
{
//do action #2
}
}
else
{
flag = false;
}
}
}
戈登曾建議,如果你不想來測試組件的平等,你可以測試組件的屬性的平等:
代替label.getParent() == panel1
,做到這一點或類似的,而不是:label.getParent().getName().equals("panel_1_name")
。
如果你不知道有多深了你的標籤是層次結構,還有一些便利的功能SwingUtilities
,例如:SwingUtilities.getAncestorOfClass(Class, Component)
來檢查您的標籤父容器名稱的替代可能是簡單地將事件轉發給父容器,並讓父母完成工作。根據您想要實現的內容,將標籤與父母分離可能很有用。轉發事件可以使用Component. processEvent (AWTEvent)
完成。
和'公共靜態容器getAncestorNamed(字符串名稱, 組件comp)',如果我們知道名稱。謝謝! – FaithReaper 2017-04-19 09:50:13
- 1. WPF:獲取其父面板
- 2. C#模板表單以父表單獲取面板
- 3. 如何在父面板展開或摺疊時將面板連接到它的父面板
- 4. 獲取父頁面名稱
- 5. 將另一個類的面板實例添加到父面板
- 6. 如何在java中獲得父面板?
- 7. 將JLabel集中在一個面板中
- 8. Plone的4:獲取頁面的父在portlet模板
- 9. 如何獲取MMC SnapIn面板控件的父項
- 10. 從子控件獲取父面板的「名稱」
- 11. wordpress模板獲取父頁面的內容
- 12. 獲取父頁面的子頁面
- 13. 獲取JLabel的名稱
- 14. 從父模板獲取價值
- 15. 獲取wordpress父模板名稱
- 16. 獲取面板顏色
- 17. 獲取面板的顏色
- 18. 獲取面板的座標
- 19. 在面板中獲取wxImage
- 20. Java。將ImageIcon從面板1上的JLabel拖放到面板2上的JLabel。添加計數器功能
- 21. 獲取下面的透明面板
- 22. 如何獲取父頁面引用
- 23. WPF子頁面獲取父框架
- 24. Magento獲取CMS頁面父母
- 25. 從父頁面獲取內容
- 26. 父窗體到面板
- 27. WordPress的頁面父模板
- 28. 父面板沒有着色
- 29. 使用Boxlayout導致我的面板僅爲父面板的一半大小
- 30. 如何獲取(當前模板的)父模板實例
謝謝,這是非常有幫助:) – Kari 2009-12-21 08:52:23
不客氣... – bguiz 2009-12-21 13:14:50