package com.limegroup.gnutella.gui.tables; import javax.swing.*; import javax.swing.table.JTableHeader; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * Created by IntelliJ IDEA. * User: Miguel Muñoz (SwingGuy1024@yahoo.com) * Date: Jul 17, 2005 * Time: 2:50:40 AM * <p/> * It drives me crazy that LimeWire's JTables use AUTO_RESIZE_NEXT_COLUMN. But * rather than trying to persuade you to choose a different mode, I wrote * this class to throw that decision into the hands of the end user. * <p/> * Add this MouseListener to any JTableHeader, and the user will be able to * choose the resize mode by holding down the appropriate modifier keys.Guil * With no modifiers, this class leaves the behavior of LimeWire's resize mode * unchanged. The shift, control, and alt keys each give the user a different * resize mode. Multiple modifiers have no effect -- shift overrides control, * which overrides Alt. * <p/> * The default setting is as follows: <br> *    No modifiers: AUTO_RESIZE_NEXT_COLUMN <br> *    Shift key: AUTO_RESIZE_LAST_COLUMN <br> *    Control key: AUTO_RESIZE_SUBSEQUENT_COLUMNS <br> *    Alt key: AUTO_RESIZE_ALL_COLUMNS <br> * You may choose a different order by using the other constructor. */ public class FlexibleColumnResizeAdapter extends MouseAdapter { int dMode; int sMode; int cMode; int aMode; /** * Create a FlexibleColumnResizeAdapter with the default settings, as * described above */ public FlexibleColumnResizeAdapter() { this(JTable.AUTO_RESIZE_NEXT_COLUMN, JTable.AUTO_RESIZE_LAST_COLUMN, JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS, JTable.AUTO_RESIZE_ALL_COLUMNS); } /** * Create a FlexibleColumnResizeAdapter with the specified settings. * When multiple modifiers are pressed, only one is processed. The * priority matches the order of these parameters. * @param defaultMode The resize mode when no modifier keys are pressed * @param shiftMode The resize mode when the shift key is pressed * @param controlMode The resize mode when the control key is pressed * @param altMode The resize mode when the alt key is pressed */ public FlexibleColumnResizeAdapter(int defaultMode, int shiftMode, int controlMode, int altMode) { dMode = defaultMode; sMode = shiftMode; cMode = controlMode; aMode = altMode; } /** * Sets the JTable's auto-resize mode depending on which modifier key is * pressed. * @param e */ public void mousePressed(MouseEvent e) { JTableHeader hdr = (JTableHeader) e.getSource(); int mask = e.getModifiers(); JTable tbl = hdr.getTable(); if ((mask & MouseEvent.SHIFT_MASK) != 0) tbl.setAutoResizeMode(sMode); else if ((mask & MouseEvent.CTRL_MASK) != 0) tbl.setAutoResizeMode(cMode); else if ((mask & MouseEvent.ALT_MASK) != 0) tbl.setAutoResizeMode(aMode); else tbl.setAutoResizeMode(dMode); } }