2017-05-24 78 views
0

我有一個JList和JList的每個項目都有一個獨特的顯示文本和工具提示文本。我想爲JList使用'DefaultListModel'。我的問題是,將項目添加到DefaultListModel時,可以以某種方式保存工具提示文本。JList的工具提示文本在DafaultListModel

謝謝。

+0

JList中的工具提示由單元格「ListCellRenderer」的工具提示定義。 –

回答

2

您可以覆蓋getToolTipText(...)方法來提供您的自定義工具提示。

例如:

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); 
    } 
} 

重寫getToolTipLocation(...)是沒有必要的。

編輯:

我想自定義文本保存在模型

然後,你將需要保存自定義對象包含在列表中顯示的數值模型文字提示。

查看ComboBox With Hidden Data瞭解使用此方法創建對象的示例。

+0

我不想爲每個項目顯示與工具提示相同的文本。假設我想爲第一個iem展示「一個蘋果」,爲第二個項目展示「兩個香蕉」等等。我想將自定義文本保存在模型中。 –

+0

@ Md.ShahriarMahbub,'我不想爲每個項目顯示相同的文本作爲提示 - 顯然,我只是告訴你如何使用該方法。 '而且我想將自定義文本保存在模型中 - 所以現在您需要修改邏輯以獲取添加到模型中的對象的文本。 – camickr

+0

覆蓋類的toString()方法已經完成。 –