001package arcommon.ui.component; 002 003import java.awt.Insets; 004import java.awt.event.ActionEvent; 005import java.awt.event.ActionListener; 006 007import javax.swing.JButton; 008import javax.swing.JList; 009import javax.swing.JPanel; 010import javax.swing.JTable; 011import javax.swing.event.ListDataEvent; 012import javax.swing.event.ListDataListener; 013import javax.swing.event.ListSelectionEvent; 014import javax.swing.event.ListSelectionListener; 015import javax.swing.event.TableModelEvent; 016import javax.swing.event.TableModelListener; 017 018import arcommon.ui.other.GUIUtil; 019 020public abstract class CreateUpdateDeleteButtonBarJComponent extends JPanel { 021 022 private JButton createButton; 023 private JButton updateJButton; 024 private JButton deleteJButton; 025 026 private JTable table; 027 private JList<?> list; 028 private MyJList mylist; 029 030 public CreateUpdateDeleteButtonBarJComponent() { 031 this(null); 032 } 033 034 public CreateUpdateDeleteButtonBarJComponent(Insets insets) { 035 this(null, null, null, null); 036 } 037 038 public CreateUpdateDeleteButtonBarJComponent(String createLabel, String updateLabel, String deleteLabel) { 039 this(null, createLabel, updateLabel, deleteLabel); 040 } 041 042 public CreateUpdateDeleteButtonBarJComponent(Insets insets, String createLabel, String updateLabel, String deleteLabel) { 043 createButton = new JButton(createLabel != null ? createLabel : "Create..."); 044 add(createButton); 045 if (insets != null) { 046 createButton.setMargin(insets); 047 } 048 createButton.addActionListener( 049 new ActionListener() { 050 public void actionPerformed(ActionEvent e) { 051 createPressed(); 052 } 053 } 054 ); 055 056 updateJButton = new JButton(updateLabel != null ? updateLabel : "Update..."); 057 add(updateJButton); 058 updateJButton.setEnabled(false); 059 if (insets != null) { 060 updateJButton.setMargin(insets); 061 } 062 updateJButton.addActionListener( 063 new ActionListener() { 064 public void actionPerformed(ActionEvent e) { 065 updatePressed(); 066 } 067 } 068 ); 069 070 deleteJButton = new JButton(deleteLabel != null ? deleteLabel : "Delete"); 071 add(deleteJButton); 072 deleteJButton.setEnabled(false); 073 if (insets != null) { 074 deleteJButton.setMargin(insets); 075 } 076 deleteJButton.addActionListener( 077 new ActionListener() { 078 public void actionPerformed(ActionEvent e) { 079 deletePressed(); 080 } 081 } 082 ); 083 084 GUIUtil.makePanelChangeSizeOnTooManyComponents(this); 085 086 updateEnabled(false); 087 } 088 089 public void connectJList(final JList<?> plist) { 090 list = plist; 091 list.addListSelectionListener(new ListSelectionListener() { 092 public void valueChanged(ListSelectionEvent e) { 093 updateEnabledFromList(); 094 } 095 }); 096 list.getModel().addListDataListener(new ListDataListener() { 097 @Override 098 public void intervalAdded(ListDataEvent e) { 099 updateEnabledFromList(); 100 } 101 102 @Override 103 public void intervalRemoved(ListDataEvent e) { 104 updateEnabledFromList(); 105 } 106 107 @Override 108 public void contentsChanged(ListDataEvent e) { 109 updateEnabledFromList(); 110 } 111 }); 112 } 113 114 public void connectJList(final MyJList plist) { 115 mylist = plist; 116 mylist.addListSelectionListener(new ListSelectionListener() { 117 public void valueChanged(ListSelectionEvent e) { 118 updateEnabledFromMyList(); 119 } 120 }); 121 mylist.getModel().addListDataListener(new ListDataListener() { 122 @Override 123 public void intervalAdded(ListDataEvent e) { 124 updateEnabledFromMyList(); 125 } 126 127 @Override 128 public void intervalRemoved(ListDataEvent e) { 129 updateEnabledFromMyList(); 130 } 131 132 @Override 133 public void contentsChanged(ListDataEvent e) { 134 updateEnabledFromMyList(); 135 } 136 }); 137 } 138 139 public void connectJTable(MyJTable pmyJTable) { 140 connectJTable(pmyJTable.getTable()); 141 } 142 143 public void connectJTable(JTable ptable) { 144 table = ptable; 145 146 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 147 public void valueChanged(ListSelectionEvent e) { 148 if (e.getValueIsAdjusting()) { 149 return ; 150 } 151 152 updateEnabledFromTable(); 153 } 154 }); 155 156 table.getModel().addTableModelListener(new TableModelListener() { 157 public void tableChanged(TableModelEvent e) { 158 updateEnabledFromTable(); 159 } 160 }); 161 } 162 163 public void setEnabled(boolean enabled) { 164 createButton.setEnabled(enabled); 165 if (enabled) { 166 if (table != null) { 167 updateEnabledFromTable(); 168 } else if (list != null) { 169 updateEnabledFromList(); 170 } else if (mylist != null) { 171 updateEnabledFromMyList(); 172 } 173 } else { 174 updateEnabled(false); 175 } 176 } 177 178 private void updateEnabledFromTable() { 179 int selectedIndex = table.getSelectedRow(); 180 int rowCount = table.getModel().getRowCount(); 181 if (rowCount == 0) { // HACK: For some odd reason getSelectedRow() can be != -1 when getRowCount() == 0 182 selectedIndex = -1; 183 } 184 boolean enabled = selectedIndex != -1; 185 updateEnabled(enabled); 186 } 187 188 private void updateEnabledFromList() { 189 int selectedIndex = list.getSelectedIndex(); 190 boolean enabled = selectedIndex != -1; 191 updateEnabled(enabled); 192 } 193 194 private void updateEnabledFromMyList() { 195 int selectedIndex = mylist.getSelectedIndex(); 196 boolean enabled = selectedIndex != -1; 197 updateEnabled(enabled); 198 } 199 200 private void updateEnabled(boolean enabled) { 201 updateJButton.setEnabled(enabled); 202 deleteJButton.setEnabled(enabled); 203 } 204 205 public abstract void createPressed(); 206 207 public abstract void updatePressed(); 208 209 public abstract void deletePressed(); 210 211 private static final long serialVersionUID = -9207637761823940281L; 212}