package com.towel.swing.table; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JPanel; import com.towel.collections.paginator.ListPaginator; import com.towel.collections.paginator.Paginator; import com.towel.el.FieldResolver; import com.towel.swing.event.ObjectSelectListener; import com.towel.swing.event.SelectEvent; public class OptionTable<T> implements ActionListener { public static class OptionButton { private int actionId; private JButton button; public int getActionId() { return actionId; } public JButton getButton() { return button; } public OptionButton(JButton button, int actionId) { this.actionId = actionId; this.button = button; } } private SelectTable<T> table; private List<ObjectSelectListener> listeners; private Object selected; private List<T> selecteds; private Container pane; private List<OptionButton> buttons; private JPanel bPanel; private Paginator<T> data; public OptionTable(FieldResolver cols[], Paginator<T> data) { this(cols, data, 0); } public OptionTable(FieldResolver cols[], Paginator<T> data, int selectType) { this.data = data; table = new SelectTable<T>(new ObjectTableModel<T>(cols), data, selectType); listeners = new ArrayList<ObjectSelectListener>(); buttons = new ArrayList<OptionButton>(); table.addObjectSelectListener(new ObjectSelectListener() { @SuppressWarnings("unchecked") public void notifyObjectSelected(SelectEvent e) { if (((SelectTable<T>) e.getSource()).getSelectType() == SelectTable.SINGLE) { selected = e.getObject(); } else { selecteds = (java.util.List<T>) e.getObject(); } } }); pane = new JPanel(); JPanel panel = (JPanel) pane; panel.setLayout(new BorderLayout()); bPanel = new JPanel(); panel.add(table.getContent(), "North"); panel.add(bPanel, "South"); } public OptionTable(FieldResolver cols[], java.util.List<T> data) { this(cols, new ListPaginator<T>(data, 25)); } public Container getContent() { return pane; } public void addObjectSelectListener(ObjectSelectListener listener) { listeners.add(listener); } private void notifyListeners(SelectEvent event) { for (ObjectSelectListener listener : listeners) listener.notifyObjectSelected(event.clone()); } public void actionPerformed(ActionEvent arg0) { table.updateSelectedObject(); for (OptionButton ot : buttons) { if (ot.getButton().equals(arg0.getSource())) { if (table.getSelectType() == SelectTable.SINGLE) { notifyListeners(new SelectEvent(this, selected, ot.getActionId())); } else { notifyListeners(new SelectEvent(this, selecteds, ot.getActionId())); } return; } } } public void addOptionButton(OptionButton opButton) { buttons.add(opButton); opButton.getButton().addActionListener(this); bPanel.removeAll(); for (OptionButton button : buttons) bPanel.add(button.getButton()); bPanel.revalidate(); } public Paginator<T> getData() { return data; } public void reload() { table.notifyDataChanged(); } }