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

class ToolTipJList extends JList implements ListSelectionListener
{
    JLabel label ;

    public ToolTipJList(JLabel lab)
    {
        super() ;
        label = lab ;
        setToolTipText("") ;
    }
    public ToolTipJList(ListModel dataModel, JLabel lab)
    {
        super(dataModel) ;
        label = lab ;
        setToolTipText("") ;
    }
    public ToolTipJList(Object[] listData, JLabel lab)
    {
        super(listData) ;
        label = lab ;
        setToolTipText("") ;
    }

    public String getToolTipText(MouseEvent ev)
    {
        int index = locationToIndex(ev.getPoint()) ;
        if (index>-1)
        {
            Object item = getModel().getElementAt(index) ;
            return item.toString()+" = "+index+"-element" ;
        }
        return null ;
    }

    public void valueChanged (ListSelectionEvent ev)
    {
        label.setText(getSelectedIndex()+": "+getSelectedValue()) ;
    }
}

public class Podpowiedzi extends JFrame
{
    private ToolTipJList lista ;
    private JLabel napis ;

    public Podpowiedzi() throws UnsupportedEncodingException
    {
        super("test listy") ;
        String[] etykiety =
        {
            "dwa",
            "trzy",
            "pięć",
            "siedem",
            new String("jedenaście (11) to liczba neutralna".getBytes(),"ISO8859_2"),
            new String("trzynaście (13) to liczba pechowa".getBytes(),"ISO8859_2"),
            new String("siedemnaście (17) to liczba szczęśliwa".getBytes(),"ISO8859_2"),
            new String("dziewiętnaście (19) to liczba neutralna".getBytes(),"ISO8859_2")
        } ;
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE) ;
        setSize(200,150) ;
        napis = new JLabel("???") ;
        lista = new ToolTipJList(etykiety,napis) ;
        lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ;
        lista.getSelectionModel().addListSelectionListener(lista) ;
        getContentPane().add(napis,BorderLayout.NORTH) ;
        getContentPane().add(new JScrollPane(lista),BorderLayout.CENTER) ;
        setVisible(true) ;
    }
    
    public static void main(String args[]) throws UnsupportedEncodingException
    {
        new Podpowiedzi() ;
    }
}
