2012-02-27 23 views
10

मेरे पास एक सारणी है जहां प्रत्येक पंक्ति एक तस्वीर का प्रतिनिधित्व करती है। कॉलम पथ में मैं अपना पूर्ण पथ संग्रहीत करता हूं। स्ट्रिंग थोड़ी देर तक चल रही है, मुझे यह पसंद है कि जब मैं विशिष्ट सेल पर माउस को घुमाता हूं, तो माउस के बगल में माउस के बगल में एक टूलटिप पॉप-अप होना चाहिए।किसी jtable में किसी सेल में टूलटिप कैसे जोड़ें?

उत्तर

21

मुझे लगता है कि आपने पथ के लिए कस्टम CellRenderer नहीं लिखा है, लेकिन बस DefaultTableCellRenderer का उपयोग करें। आपको DefaultTableCellRenderer उप-वर्ग करना चाहिए और getTableCellRendererComponent में टूलटिप सेट करना चाहिए। फिर कॉलम के लिए रेंडरर सेट करें।

class PathCellRenderer extends DefaultTableCellRenderer { 
    public Component getTableCellRendererComponent(
         JTable table, Object value, 
         boolean isSelected, boolean hasFocus, 
         int row, int column) { 
     JLabel c = (JLabel)super.getTableCellRendererComponent(// params from above); 
     // This... 
     String pathValue = <getYourPathValue>; // Could be value.toString() 
     c.setToolTipText(pathValue); 
     // ...OR this probably works in your case: 
     c.setToolTipText(c.getText()); 
     return c; 
    } 
} 

... 
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. java.io.File) you could set the renderer for that type 
... 
+0

आप super.getTableCellRendererComponent को कॉल नहीं कर सकते हैं। – codenamezero

+2

@codenamezero क्यों नहीं? आप जानते हैं कि नमूना कोड में मैंने 'DefaultTableCellRenderer 'को उप-वर्गीकृत किया है जिसमें एक गैर-सारणी फैशन में विधि है और यह स्वयं' JLabel' है? –

0

आप कहते हैं कि आप सेल में एक पूर्ण पथ स्टोर करते हैं। पूर्ण पथ स्ट्रिंग सेट करने के लिए आप शायद JLabel का उपयोग कर रहे हैं। मान लीजिए आप अपने सेल में एक लेबल है, टूलटिप सामग्री व्यक्त करने के लिए html टैग का प्रयोग:

JLabel label = new JLabel("Bla bla"); 
label.setToolTipText("<html><p>information about cell</p></html>"); 

setToolTipText() आप JLabel के अलावा कुछ प्रयोग कर रहे हैं कुछ अन्य स्विंग घटकों के लिए इस्तेमाल किया जा सकता।

+0

deffinetly नहीं ... –

+1

* "deffinetly नहीं" * मुझे आश्चर्य है अगर @deporter उस टिप्पणी को समझता है। मुझे यकीन नहीं है। :( –

+3

कृपया थोड़ा और सटीक बनें: _ अपने सेल_ में एक लेबल गुमराह कर सकता है (सेल में कभी भी घटक नहीं होना चाहिए) इसके बजाय यह एक रेंडरर द्वारा प्रदान किया गया एक लेबल है ... अच्छा .. घटक प्रस्तुत करना: -) – kleopatra

25

बस नीचे दिए गए कोड का उपयोग करते हुए JTable वस्तु का निर्माण।

JTable auditTable = new JTable(){ 

      //Implement table cell tool tips.   
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 

       try { 
        tip = getValueAt(rowIndex, colIndex).toString(); 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
+0

वास्तव में, मुझे लगता है कि यह स्वीकार्य समाधान से अधिक कुशल है। –

+0

जब हम कुछ कॉलम के आधार पर तालिका को सॉर्ट करते हैं तो यह काम नहीं कर सकता है। –

+0

'getRowSorter()। ConvertRowIndexToModel (rowIndex) 'और' getRowSorter() कनवर्ट करें RowIndexToModel (rowIndex)' का उपयोग मॉडल से सटीक पंक्ति प्राप्त करने के लिए करें। –

संबंधित मुद्दे