Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    (java) Impostare tooltip in header di una jtable

    Volevo mostraere un tooltip quando viene passato il mouse sopra il nome delle colonne di una jtable
    Ho provato questo codice, ma non funziona
    Sapete dirmi dov'e' l'errore?

    codice:
    package jtable;
    
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;
    
    //To display a tool tip for a column header, install a mouse motion listener on the header component and change its tool tip based on which column header is under the cursor. 
    public class ToolTipForCell {
    
    	public ToolTipForCell() {
    		//super();
    		int rows = 10;
    	    int cols = 5;
    	    JTable table = new JTable(rows, cols);
    	    
    	    JTableHeader header = table.getTableHeader();
    	    
    	    ColumnHeaderToolTips tips = new ColumnHeaderToolTips();
    	    
    	    // Assign a tooltip for each of the columns
    	    for (int c=0; c<table.getColumnCount(); c++) {
    	        TableColumn col = table.getColumnModel().getColumn(c);
    	        tips.setToolTip(col, "Col "+c);
    	    }
    	    header.addMouseMotionListener(tips);
    	    
    	    JFrame frame = new JFrame();
    	    frame.getContentPane().add(table);
    	    frame.pack();
    	    frame.setLocationRelativeTo(null);
    	    frame.setVisible(true);
    	}
    	    
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		new ToolTipForCell();
    	}
    
    	class ColumnHeaderToolTips extends MouseMotionAdapter {
            // Current column whose tooltip is being displayed.
            // This variable is used to minimize the calls to setToolTipText().
            TableColumn curCol;
        
            // Maps TableColumn objects to tooltips
            Map tips = new HashMap();
        
            // If tooltip is null, removes any tooltip text.
            public void setToolTip(TableColumn col, String tooltip) {
                if (tooltip == null) {
                    tips.remove(col);
                } else {
                    tips.put(col, tooltip);
                }
            }
        
            public void mouseMoved(MouseEvent evt) {
            	System.out.println("mouse moved!");
                TableColumn col = null;
                JTableHeader header = (JTableHeader)evt.getSource();
                JTable table = header.getTable();
                TableColumnModel colModel = table.getColumnModel();
                int vColIndex = colModel.getColumnIndexAtX(evt.getX());
        
                // Return if not clicked on any column header
                if (vColIndex >= 0) {
                    col = colModel.getColumn(vColIndex);
                }
        
                if (col != curCol) {
                    header.setToolTipText((String)tips.get(col));
                    curCol = col;
                }
            }
        }
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    qualche idea?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Risolto

    codice:
    package jtable;
    
    import java.awt.BorderLayout;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.JTableHeader;
    import javax.swing.table.TableColumnModel;
    
    /**
     * @version 1.0 02/25/99
     */
    public class ToolTipHeaderTable extends JPanel {
    
    	private static final long serialVersionUID = 1L;
    
    	public ToolTipHeaderTable() {
    		setLayout(new BorderLayout());
    		String[] headerStr = { "default", "jw", "ja", "la", "unknown" };
    		String[] toolTipStr = { "", "Javanese", "Japanese", "Latin" };
    
    		DefaultTableModel dm = new DefaultTableModel(headerStr, 4);
    		JTable table = new JTable(dm);
    
    		ToolTipHeader header = new ToolTipHeader(table.getColumnModel());
    		header.setToolTipStrings(toolTipStr);
    		header.setToolTipText("Default ToolTip TEXT");
    		table.setTableHeader(header);
    
    		JScrollPane pane = new JScrollPane(table);
    		add(pane, BorderLayout.CENTER);
    	}
    
    	public static void main(String[] args) {
    		JFrame f = new JFrame("ToolTipHeaderTable Example");
    		f.getContentPane().add(new ToolTipHeaderTable(), BorderLayout.CENTER);
    		f.setSize(400, 100);
    		f.setVisible(true);
    		f.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    	}
    
    	class ToolTipHeader extends JTableHeader {
    
    		private static final long serialVersionUID = 1L;
    
    		String[] toolTips;
    
    		public ToolTipHeader(TableColumnModel model) {
    			super(model);
    		}
    
    		public String getToolTipText(MouseEvent e) {
    			int col = columnAtPoint(e.getPoint());
    			int modelCol = getTable().convertColumnIndexToModel(col);
    			String retStr;
    			try {
    				retStr = toolTips[modelCol];
    			} catch (NullPointerException ex) {
    				retStr = "";
    			} catch (ArrayIndexOutOfBoundsException ex) {
    				retStr = "";
    			}
    			if (retStr.length() < 1) {
    				retStr = super.getToolTipText(e);
    			}
    			return retStr;
    		}
    
    		public void setToolTipStrings(String[] toolTips) {
    			this.toolTips = toolTips;
    		}
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.