2017-05-24 3 views
0

J'ai un JList et chaque élément du JList a un texte d'affichage distinct et un texte d'info-bulle. Je voudrais utiliser 'DefaultListModel' pour le JList. Ma question est qu'il est possible de sauvegarder le texte de l'info-bulle quand on ajoute un élément au DefaultListModel.JList avec le texte de l'info-bulle dans DafaultListModel

Merci.

+0

Les info-bulles dans JList sont définies par l'info-bulle de la cellule 'ListCellRenderer' –

Répondre

2

Vous pouvez remplacer la méthode getToolTipText(...) pour fournir votre info-bulle personnalisée.

Par exemple:

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

public class ListToolTip extends JFrame 
{ 
    public ListToolTip() 
    { 
     DefaultListModel model = new DefaultListModel(); 
     model.addElement("one"); 
     model.addElement("two"); 
     model.addElement("three"); 
     model.addElement("four"); 
     model.addElement("five"); 
     model.addElement("six"); 
     model.addElement("seven"); 
     model.addElement("eight"); 
     model.addElement("nine"); 
     model.addElement("ten"); 

     JList list = new JList(model) 
     { 
      public String getToolTipText(MouseEvent e) 
      { 
       int row = locationToIndex(e.getPoint()); 
       Object o = getModel().getElementAt(row); 
       return o.toString(); 
      } 

      public Point getToolTipLocation(MouseEvent e) 
      { 
       int row = locationToIndex(e.getPoint()); 
       Rectangle r = getCellBounds(row, row); 
       return new Point(r.width, r.y); 
      } 
     }; 

     JScrollPane scrollPane = new JScrollPane(list); 
     getContentPane().add(scrollPane); 
    } 

    public static void main(String[] args) 
    { 
     ListToolTip frame = new ListToolTip(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.setSize(400, 100); 
     frame.setVisible(true); 
    } 
} 

Redéfinition getToolTipLocation(...) n'est pas nécessaire.

Edit:

Je veux enregistrer le texte personnalisé dans le modèle

Ensuite, vous devrez enregistrer un objet personnalisé dans le modèle qui contient la valeur affichée dans la liste et la texte pour l'info-bulle.

Découvrez ComboBox With Hidden Data pour un exemple de création d'un objet en utilisant cette approche.

+0

Je ne veux pas afficher le même texte qu'une info-bulle pour chaque élément. Disons que je veux montrer "Une pomme" pour le premier Iem et "deux bananes" pour les seconds articles et ainsi de suite. Et je veux enregistrer le texte personnalisé dans le modèle. –

+0

@ Md.ShahriarMahbub, «Je ne veux pas montrer le même texte qu'une info-bulle pour chaque article» - évidemment, je vous montrais simplement comment utiliser la méthode. 'Et je veux enregistrer le texte personnalisé dans le modèle' - alors maintenant vous devez modifier la logique pour obtenir le texte de l'objet que vous avez ajouté au modèle. – camickr

+0

La méthode overString() de la classe a fait l'affaire. –