2011-08-30 5 views
6

Tengo un JPanel que contiene JButtons y algunas otras cosas, y quiero que todo el panel tenga una información sobre herramientas. Cuando llamo a setToolTipText en el JPanel, la información sobre herramientas solo aparece en espacios vacíos dentro del JPanel.¿Cómo configuro una información sobre herramientas en un JPanel y sus hijos?

¿Hay alguna manera de establecer una información sobre herramientas en el JPanel de modo que se aplique a JPanel y sus hijos, o me veo obligado a llamar a setToolTipText en todos los niños también?

+1

difícil decir algo mejor ... http://stackoverflow.com/questions/7138914/swing- how-to-create-a-custom-jtooltip-like-widget-that-moves-with-the-mouse/7139057 # comment-8561297, pero tal vez estoy wong – mKorbel

Respuesta

7

Crear un método recursivo:

public static void setToolTipRecursively(JComponent c, String text) { 

    c.setToolTipText(text); 

    for (Component cc : c.getComponents()) 
     if (cc instanceof JComponent) 
      setToolTipRecursively((JComponent) cc, text); 
} 

ejemplo completo:

public static void main(String[] args) { 

    final JFrame frame = new JFrame("Test"); 

    frame.add(new JLabel("Testing (no tooltip here)"), BorderLayout.NORTH); 

    final JPanel panel = new JPanel(new GridLayout(2, 1)); 
    panel.setBackground(Color.RED); 

    panel.add(new JLabel("Hello")); 
    panel.add(new JTextField("World!")); 

    setToolTipRecursively(panel, "Hello World!"); 

    frame.add(panel, BorderLayout.CENTER); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+0

En esta solución, la información sobre herramientas parpadea y cambia de posición cuando cruce entre subcomponentes. He publicado una pregunta de seguimiento sobre cómo podría tratarse el contenedor como una sola unidad: http://stackoverflow.com/q/8592264/411282 –

Cuestiones relacionadas