Bem galera procurei muito e não consegui encontrar nada pronto , então eu mesmo escrevi um metodo para fazer isso , eu gostaria que o pessoal desse uma olhada pra ver se tem alguma coisa que poderia ser modificada pra otimizar ou alguma coisa assim !
private void showTooltip(JLabel label,final int miliseconds)
{
PopupFactory popupFactory = PopupFactory.getSharedInstance();
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
Point p = label.getLocationOnScreen();
Point center = new Point(screen.width/2, screen.height/2);
JToolTip tip = label.createToolTip();
tip.setTipText(label.getToolTipText());
Dimension tipDim = tip.getPreferredSize();
//Posiciona e centraliza o popup(tooltip) em relacao ao label (Horizontal)
int x = p.x+(label.getSize().width/2);
x = x-(tipDim.width/2);
//Posiciona e abaixa o popup(tooltip) para descobrir o label (Vertical)
int y = p.y+(label.getSize().height) + 10;
//Reajuste , garante exibicao dentre os limites da tela (Horizontal)
if(p.x > center.x) {
int posX = (int)center.distance(x,center.y) + tipDim.width;
if( posX > center.x )
x = x - (posX - center.x);
}
else {
int posX = (int)center.distance(x,center.y);
if( posX > center.x )
x = x + (posX - center.x);
}
//Reajuste , garante exibicao dentre os limites da tela (Vertical)
if(p.y > center.y) {
int posY = (int)center.distance(center.x,y) + tipDim.height;
if( posY > center.y )
y = y - (posY - center.y);
}
else {
int posY = (int)center.distance(center.x,y);
if( posY > center.y )
y = y + (posY - center.y);
}
final Popup popup = popupFactory.getPopup(label, tip, x, y);
Thread toShowThread = new Thread() {
public void run() {
popup.show();
try{Thread.sleep(miliseconds);}
catch(InterruptedException ex){ex.printStackTrace();}
popup.hide();
}
};
toShowThread.start();
}
Funciona tudo perfeitamente , mas existem alguns incovenientes !
- Enquanto um tooptip esta sendo exibido , nada impede que outro
seja exibido também dando uma “sujada na tela” . Gostaria que a atual
fosse fechada e a nova fosse mostrada . - Se eu reposicionar a janela enquanto o tooptip esta sendo exibido
ele permanece no local onde estava . Gostaria que ele acompanhasse o label.
Esse delay que eu criei ai , eu não gostei muito também nao , sera que teria
alguma outra forma .
Se alguém tiver algumas dicas …