JLabel'in eklendiği panelin adını almak mümkün mü? Farklı JPanellere bazı JLabels ekledim ve jLabels'in yerleştirildiği panele göre farklı fare olayları aramak istiyorum.JLabel - ana paneli al?
cevap
label.getParent()
'u çalıştırırsanız, etiketin içinde bulunduğu paneli döndürür.
parent.getName()
numaralı telefonu arayabilirsin, ancak şimdi buna ihtiyacınız olmayan bir nesneye sahip olacaksın.
basit yolu bunu yapmak için:
//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
}
}
Yukarıdaki kod etiketleri JPanels direkt çocukları olduklarını varsayar. Ancak, bu her zaman böyle olmayabilir, bazen büyük torunlar ya da panelin büyük torunları. Bu durumda, üst sıradaki hiyerarşiden geçmek için biraz daha karmaşık işlemler gerçekleştirirsiniz. , label.getParent() == panel1
ait
yerine yerine bu veya benzeri yapın: Eğer bileşenlerin eşitliği için test etmek istemiyorsanız Gordon gibi
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;
}
}
}
Eğer bileşenlerin özelliklerinin eşitliği test edebilirsiniz, önerdi :
label.getParent().getName().equals("panel_1_name")
.
Eğer etiket hiyerarşisinde aşağı, örneğin, SwingUtilities
bazı kullanışlı işlevler var ne kadar derin bilmiyorsanız: SwingUtilities.getAncestorOfClass(Class, Component)
Etiketlerinizde üst kapsayıcı adını kontrol alternatifi olabilir olayı ana taşıyıcıya basitçe iletmek ve ebeveynin işi yapmasına izin vermek. Neyi başarmaya çalıştığınıza bağlı olarak, etiketleri ebeveynlerden ayırmak yararlı olabilir. Yönlendirme olayları Component. processEvent (AWTEvent)
kullanılarak yapılabilir.
Ve 'public static Container getAncestorNamed (Dize adı, Bileşen comp)', adını biliyorsanız. Teşekkürler! – FaithReaper
bu çok yardımcı oldu :) – Kari
Hoş Geldiniz ... – bguiz