Переопределить метод createToolTip() JPanel в java swing

#java #swing #tooltip #jpanel

#java #swing #всплывающая подсказка #jpanel

Вопрос:

У меня есть, ListCellRenderer который расширяется JPanel . Теперь я пытаюсь переопределить его createToolTip() . Но, похоже, что метод не переопределяется. В чем может быть причина?

Мой код:

 public class MyRender extends JPanel implements ListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        if (value != null) {
            removeAll();

            // -- add data to JPanel.

            setToolTipText("hi");
            return this;
        }
        return null;
    }

    @Override
    public JToolTip createToolTip() {
        System.out.println("Success");
        return new MyToolTip();
    }
}
  

Он даже не выводит «Success».

Ответ №1:

Я предполагаю, что этот метод никогда не вызывается, потому что ListCellRenderer действует как «резиновый штамп«, следовательно, он существует только во время перерисовки и никогда не добавляется ни в один контейнер, в частности не в тот, JList которому он назначен.

Таким образом, всплывающая подсказка всегда создается JList самой собой, никогда ListCellRenderer .

Если вы хотите иметь специальную всплывающую подсказку для каждого элемента в вашем списке, то есть несколько способов, самый простой (но, возможно, не самый приятный), вероятно, это создать подкласс JList и переопределить getToolTipText(MouseEvent e) . Этот метод получил координаты мыши, для которых, чтобы получить всплывающую подсказку, вам придется преобразовать их в индекс элемента, над которым находится мышь, с помощью locationToIndex() .

Комментарии:

1. как получить координату мыши в getToolTipText() ?

2. в MouseEvent переданном в качестве аргумента.

3. Ладно, понял. На самом деле сначала я переопределил значение по умолчанию getToolTipText() , то есть без каких-либо аргументов.

4. Извините за путаницу, я не обратил внимания на другой метод.