package jadex.commons.jtable;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
public class VisibilityPopupMenu extends JPopupMenu
{
private IVisibilityTableColumnModel model;
public VisibilityPopupMenu(JTable table)
{
if (table.getColumnModel() instanceof IVisibilityTableColumnModel)
{
this.model = (IVisibilityTableColumnModel) table.getColumnModel();
}
else
{
throw new IllegalArgumentException("Jtable has no IVisibilityTableColumnModel");
}
}
public void show(Component invoker, int x, int y)
{
removeAll();
addMenuItems();
super.show(invoker, x, y);
}
private void addMenuItems() {
Enumeration eac = model.getAllColumns();
while (eac.hasMoreElements())
{
TableColumn column = (TableColumn) eac.nextElement();
JCheckBoxMenuItem item = new JCheckBoxMenuItem((String) column.getIdentifier());
item.setSelected(model.isColumnVisible(column));
item.setEnabled(model.isColumnChangeable(column));
item.addActionListener(new MenuItemActionListener());
add(item);
}
addSeparator();
JMenuItem showAll = new JMenuItem("Show all columns");
showAll.addActionListener(new ShowAllActionListener());
add(showAll);
}
private class MenuItemActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
try
{
JCheckBoxMenuItem item = (JCheckBoxMenuItem) e.getSource();
TableColumn column = model.getAllColumn(getComponentIndex(item));
model.setColumnVisible(column, item.isSelected());
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
private class ShowAllActionListener implements ActionListener
{
/**
* Make all columns visible
*/
public void actionPerformed(ActionEvent e)
{
Enumeration eac= model.getAllColumns();
while (eac.hasMoreElements())
{
TableColumn column = (TableColumn) eac.nextElement();
if (model.isColumnChangeable(column)) {
model.setColumnVisible(column,true);
}
}
}
}
}