swing/samples/net/sf/xframe/swing/demo JXTableHeaderToolTips1.java,NONE,1.1 JXTableHeaderToolTips2.java,NONE,1.1

Kurt Riede <[email protected]> Thu, 19 May 2005 00:09:37 +0000
Newsgroups gmane.text.xml.xframe.xsddoc.devel
Message-ID <[email protected]>
Update of /cvsroot/xframe/swing/samples/net/sf/xframe/swing/demo
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10224/samples/net/sf/xframe/swing/demo

Added Files:
	JXTableHeaderToolTips1.java JXTableHeaderToolTips2.java 
Log Message:
fix for bug [1200282] Header tooltips

--- NEW FILE: JXTableHeaderToolTips2.java ---
package net.sf.xframe.swing.demo;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import net.sf.xframe.swing.JXTable;
import net.sf.xframe.swing.table.JXTableHeader;

/**
 * Simple demo of the JXTable with tool tips on the header by subclassing
 * class {@link net.sf.xframe.swing.table.JXTableHeader JXTableHeader} and overwriting
 * method {@link net.sf.xframe.swing.table.JXTableHeader#getToolTipText getToolTipText}.
 *
 * @author <a href=mailto:[email protected]>Kurt Riede</a>
 */
public final class JXTableHeaderToolTips2 {

    /**
     * Static main method.
     * @param args arguments
     */
    public static void main(final String[] args) {
        new JXTableHeaderToolTips2().run();
    }

    /**
     * Run the demo.
     */
    public void run() {
        // create the demo frame
        final JFrame frame = new JFrame("JXTable Demo");
        final BorderLayout layout = new BorderLayout();
        frame.getContentPane().setLayout(layout);
        // create and add the table
        final TableModel model = new DefaultTableModel(15, 20);
        final JXTable jxTable = new JXTable(model, 2);
        frame.getContentPane().add(jxTable, BorderLayout.CENTER);
        // create some buttons to change the number of frozen columns
        final JPanel buttonPanel = new JPanel();
        frame.getContentPane().add(buttonPanel, BorderLayout.NORTH);
        buttonPanel.setLayout(new FlowLayout());
        for (int i = 0; i < 10; i++) {
            final JButton button = new JButton("Freeze " + i);
            final int num = i;
            button.addActionListener(new ActionListener() {

                public void actionPerformed(final ActionEvent e) {
                    jxTable.setFrozenColumns(num);
                }
            });
            buttonPanel.add(button);
        }
        // Create table header with tooltips for each of the columns
        jxTable.setTableHeader(new JXTableHeader(jxTable.getColumnModel()) {
            public String getToolTipText(final MouseEvent e) {
                System.out.println("getToolTipText" + e.getX() + ", " + e.getY());
                final int index = getColumnModel().getColumnIndexAtX(e.getX());
                final int realIndex = getColumnModel().getColumn(index).getModelIndex();
                return "Col " + realIndex;
            }
        });

        // set size, center and show the demo frame
        frame.setSize(650, 300);
        final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        final Dimension frameSize = frame.getSize();
        frame.setLocation((screen.width - frameSize.width) / 2, (screen.height - frameSize.height) / 2);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

--- NEW FILE: JXTableHeaderToolTips1.java ---
package net.sf.xframe.swing.demo;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

import net.sf.xframe.swing.JXTable;
import net.sf.xframe.swing.table.JXTableHeader;

/**
 * Simple demo of the JXTable with tool tips on the header using a
 * {@link java.awt.event.MouseMotionListener MouseMotionListener}.
 *
 * @author <a href=mailto:[email protected]>Kurt Riede</a>
 */
public final class JXTableHeaderToolTips1 {

    /**
     * Static main method.
     * @param args arguments
     */
    public static void main(final String[] args) {
        new JXTableHeaderToolTips1().run();
    }

    /**
     * Run the demo.
     */
    public void run() {
        // create the demo frame
        final JFrame frame = new JFrame("JXTable Demo");
        final BorderLayout layout = new BorderLayout();
        frame.getContentPane().setLayout(layout);
        // create and add the table
        final TableModel model = new DefaultTableModel(15, 20);
        final JXTable jxTable = new JXTable(model, 2);
        frame.getContentPane().add(jxTable, BorderLayout.CENTER);
        // create some buttons to change the number of frozen columns
        final JPanel buttonPanel = new JPanel();
        frame.getContentPane().add(buttonPanel, BorderLayout.NORTH);
        buttonPanel.setLayout(new FlowLayout());
        for (int i = 0; i < 10; i++) {
            final JButton button = new JButton("Freeze " + i);
            final int num = i;
            button.addActionListener(new ActionListener() {
                public void actionPerformed(final ActionEvent e) {
                    jxTable.setFrozenColumns(num);
                }
            });
            buttonPanel.add(button);
        }

        // Assign a tooltip for each of the columns
        final ColumnHeaderToolTips tips = new ColumnHeaderToolTips();
        final TableColumnModel columnModel = jxTable.getColumnModel();
        for (int c = 0; c < jxTable.getColumnCount(); c++) {
            tips.setToolTip(columnModel.getColumn(c), "Col " + c);
        }
        jxTable.getTableHeader().addMouseMotionListener(tips);

        // set size, center and show the demo frame
        frame.setSize(650, 300);
        final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        final Dimension frameSize = frame.getSize();
        frame.setLocation((screen.width - frameSize.width) / 2, (screen.height - frameSize.height) / 2);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private class ColumnHeaderToolTips extends MouseMotionAdapter {

        /** Current column whose tooltip is being displayed.
         * This variable is used to minimize the calls to setToolTipText(). */
        private TableColumn curCol;

        /** Maps TableColumn objects to tooltips. */
        private final Map tips = new HashMap();

        // If tooltip is null, removes any tooltip text.
        public void setToolTip(final TableColumn col, final String tooltip) {
            if (tooltip == null) {
                tips.remove(col);
            } else {
                tips.put(col, tooltip);
            }
        }

        public void mouseMoved(final MouseEvent evt) {
            final JXTableHeader header = (JXTableHeader) evt.getSource();
            final JXTable table = header.getTable();
            final TableColumnModel colModel = table.getColumnModel();
            final int vColIndex = colModel.getColumnIndexAtX(evt.getX());
            TableColumn col = null;
            if (vColIndex >= 0) {
                col = colModel.getColumn(vColIndex);
            }
            if (col != null && col != curCol) {
                System.out.println(evt.getX() + "/" + evt.getY() + " " + col.getIdentifier());
                header.setToolTipText((String) tips.get(col));
                curCol = col;
            }
        }
    }
}



-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click