Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с JToolTip 
:(
    Опции темы
Random444
Дата 17.6.2012, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: нет



Мне нужна была всплывающая подсказка со скроллом и возможность выделять текст для копипаста. Нашел пример со скроллом, но с выделением там беда какая-то, оно то работает, то нет. Отловить баг не получается. Гляньте, может кто что подскажет? 
Код

package example;

import java.awt.*;
import java.awt.event.*;
 
import javax.swing.*;
import javax.swing.border.BevelBorder;

import org.jdesktop.swingx.JXTextArea;
 
public class JScrollableToolTip extends JToolTip implements MouseWheelListener {
 
    private JXTextArea tipArea;
    
    /** Creates a tool tip. */
    public JScrollableToolTip(final int width, final int height) {
        setPreferredSize(new Dimension(width, height));
        setLayout(new BorderLayout());
        tipArea = new JXTextArea();
        tipArea.setLineWrap(true);
        tipArea.setWrapStyleWord(true);
        tipArea.setEditable(true);
        //tipArea.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
        
        LookAndFeel.installColorsAndFont(tipArea, 
                "ToolTip.background",
                "ToolTip.foreground",
                "ToolTip.font");
        
        //LookAndFeel.installBorder(tipArea, "InternalFrame.border");                
        
        JScrollPane scrollpane = new JScrollPane(tipArea);
        scrollpane.setBorder(UIManager.getBorder("InternalFrame.border"));
        scrollpane.getViewport().setOpaque(false);
        add(scrollpane);
                
    }
    
    @Override
    public void addNotify() {
        super.addNotify();
        JComponent comp = getComponent();
        if (comp != null) {
            comp.addMouseWheelListener(this);
        }
    }
 
    @Override
    public void removeNotify() {
        JComponent comp = getComponent();
        if(comp != null) {
            comp.removeMouseWheelListener(this);
        } 
        super.removeNotify();
    }
    
    public void mouseWheelMoved(final MouseWheelEvent e) {
        JComponent comp = getComponent();
        if(comp != null) {
            tipArea.dispatchEvent(new MouseWheelEvent(tipArea, 
                    e.getID(), e.getWhen(), e.getModifiers(),
                    0, 0, e.getClickCount(), e.isPopupTrigger(),
                    e.getScrollType(), e.getScrollAmount(), e.getWheelRotation()));
        }
    }
 
    @Override
    public void setTipText(/*final*/ String tipText) {
        String oldValue = this.tipArea.getText();
        tipArea.setText(tipText);
        tipArea.setCaretPosition(0);
        firePropertyChange("tiptext", oldValue, tipText);
    }
 
    @Override
    public String getTipText() {
        return tipArea == null ? "" : tipArea.getText();
    }
 
    @Override
    protected String paramString() {
        String tipTextString = (tipArea.getText() != null ? tipArea.getText() : "");
 
        return super.paramString()
                + ",tipText=" + tipTextString;
    }
 
    //for testing only:
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
                JFrame f = new JFrame("JScrollableToolTip");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setSize(300, 200);
                f.setLocationRelativeTo(null);
                ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
                               
                JTable table = new JTable(50, 4) {
         
                    @Override
                    public JToolTip createToolTip() {
                        JScrollableToolTip tip = new JScrollableToolTip(200, 80);                         
                        tip.setComponent(this);
                        return tip; 
                    }
                };
                table.setToolTipText("Used to display a 'Tip' for a Component. "
                        + "Typically components provide api to automate the process of "
                        + "using ToolTips. For example, any Swing component can use the "
                        + "JComponent  setToolTipText method to specify the text for a standard tooltip.");
                f.add(new JScrollPane(table));
                f.setVisible(true);
            }
        });
        
    }
}



PM MAIL   Вверх
jk1
Дата 18.6.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Вот это должно помочь
Код

ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Random444
Дата 18.6.2012, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: нет



Цитата(jk1 @ 18.6.2012,  10:10)
Вот это должно помочь
Код

ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);

не помогло, к сожалению
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.