Как установить всплывающую подсказку для JPanel и его дочерних элементов? - PullRequest
6 голосов
/ 31 августа 2011

У меня есть JPanel, содержащий JButtons и несколько других вещей, и я хочу, чтобы вся панель имела всплывающую подсказку. Когда я вызываю setToolTipText в JPanel, всплывающая подсказка появляется только в пустых местах внутри JPanel.

Есть ли способ установить подсказку для JPanel так, чтобы она применялась к JPanel и его дочерним элементам, или я застрял с вызовом setToolTipText также для всех дочерних элементов?

1 Ответ

7 голосов
/ 31 августа 2011

Создать рекурсивный метод:

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

    c.setToolTipText(text);

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

Полный пример:

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);
}
...