È possibile ottenere il nome del pannello a cui è aggiunta una JLabel? Ho aggiunto alcuni JLabels a diversi JPanel, e voglio chiamare diversi eventi del mouse in base al pannello su cui sono posizionati i jLabels.JLabel - ottieni il pannello genitore?
risposta
Se si esegue label.getParent()
, il pannello restituirà l'etichetta all'interno.
Si potrebbe quindi chiamare parent.getName()
ma il fatto che ora si avrà l'oggetto che potrebbe non essere necessario ora.
Il modo più semplice per fare questo:
//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
}
}
Il codice sopra presuppone che le etichette sono figli diretti dei JPanels. Tuttavia, questo potrebbe non essere sempre il caso, a volte sono pronipoti o pronipoti della giuria. Se questo è il caso, avrai alcune operazioni leggermente più complesse per attraversare la gerarchia genitore.
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;
}
}
}
Come Gordon ha suggerito, se non si vuole verificare l'uguaglianza dei componenti, è possibile verificare l'uguaglianza delle proprietà dei componenti:
Invece di label.getParent() == panel1
, fare questo o simile, invece : label.getParent().getName().equals("panel_1_name")
.
Se non si sa come in fondo la vostra etichetta è nella gerarchia, ci sono alcune funzioni a portata di mano in SwingUtilities
, ad esempio: SwingUtilities.getAncestorOfClass(Class, Component)
Un'alternativa a controllare il nome del contenitore padre nelle etichette potrebbe essere semplicemente inoltrare l'evento al contenitore genitore e lasciare che il genitore faccia il lavoro. A seconda di ciò che stai cercando di ottenere, potrebbe essere utile disaccoppiare le etichette dai genitori. Gli eventi di inoltro possono essere eseguiti utilizzando Component. processEvent (AWTEvent)
.
E 'contenitore statico pubblico getAncestorNamed (Nome stringa, Component comp)', se conosciamo il nome. Grazie! – FaithReaper
- 1. JavaFX - Ottieni GridPane per il genitore
- 2. Ottieni il genitore della classe di istanza
- 3. Ottieni il nome della classe genitore?
- 4. Ottieni genitore/i della classe?
- 5. JLabel images array
- 6. Centratura di una JLabel in un JPanel
- 7. Ottieni il nome del controllo utente genitore WPF C#
- 8. Ottieni il nodo genitore Xpath con DomDocument PHP?
- 9. Ottieni costante bambino nel metodo genitore - Ruby
- 10. Sottolineato JLabel
- 11. setAlignmentY non centrando JLabel in BorderLayout
- 12. Ottieni l'indice del genitore div da bambino
- 13. Rendere dinamico il testo in una JLabel
- 14. Allineare il testo in JLabel a destra
- 15. Perché JLabel non visualizza "/" quando è il primo carattere?
- 16. Rifinitura su telaio/pannello traslucido/componente.
- 17. come salvare il pannello come immagine nello swing?
- 18. JLabel cambiamento di colore
- 19. Collegamenti ipertestuali in JLabel
- 20. Modifica carattere JLabel predefinito
- 21. Rotate a Swing JLabel
- 22. Visualizza BMP in JLabel
- 23. dipingendo un pulsante nel pannello Winform mentre il pannello scorre.
- 24. JLabel dipinge punti
- 25. JLabel get Image
- 26. Testo allineato in JLabel
- 27. Cambia carattere di JLabel
- 28. Come ridimensionare il pannello WorldWind?
- 29. Il pannello non si attiva
- 30. Come riassumere testo in JLabel?
grazie è stato molto utile :) – Kari
prego ... – bguiz