|
FeaturesEditor |
|
1 /* 2 * Copyright (c) 1998-2001, The University of Sheffield. 3 * 4 * This file is part of GATE (see http://gate.ac.uk/), and is free 5 * software, licenced under the GNU Library General Public License, 6 * Version 2, June 1991 (in the distribution as file licence.html, 7 * and also available at http://gate.ac.uk/gate/licence.html). 8 * 9 * Valentin Tablan 23/01/2001 10 * 11 * $Id: FeaturesEditor.java,v 1.11 2001/10/22 16:50:55 cursu Exp $ 12 * 13 */ 14 15 package gate.gui; 16 17 import gate.*; 18 import gate.util.*; 19 import gate.swing.*; 20 import gate.creole.*; 21 22 import javax.swing.*; 23 import java.awt.BorderLayout; 24 import java.awt.Component; 25 import java.awt.Color; 26 import java.awt.Dimension; 27 import javax.swing.table.*; 28 import javax.swing.event.*; 29 import java.awt.event.*; 30 31 import java.util.*; 32 33 import gate.creole.AbstractVisualResource; 34 35 public class FeaturesEditor extends AbstractVisualResource{ 36 37 public FeaturesEditor() { 38 initLocalData(); 39 initGuiComponents(); 40 initListeners(); 41 }// FeaturesEditor() 42 43 protected void initLocalData(){ 44 features = Factory.newFeatureMap(); 45 } 46 47 protected void initGuiComponents(){ 48 this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 49 tableModel = new FeaturesTableModel(); 50 table = new XJTable(tableModel); 51 table.setIntercellSpacing(new Dimension(5,5)); 52 table.setDefaultRenderer(String.class, new ObjectRenderer()); 53 table.setDefaultRenderer(Object.class, new ObjectRenderer()); 54 55 DefaultCellEditor editor = new DefaultCellEditor(new JTextField()); 56 editor.setClickCountToStart(0); 57 table.setDefaultEditor(String.class, editor); 58 table.setDefaultEditor(Object.class, editor); 59 60 JScrollPane scroll = new JScrollPane(table); 61 this.add(scroll, BorderLayout.CENTER); 62 this.add(Box.createVerticalStrut(5)); 63 64 Box box = Box.createHorizontalBox(); 65 newFeatureField = new JTextField(10); 66 newFeatureField.setMaximumSize(new Dimension(Integer.MAX_VALUE, 67 newFeatureField. 68 getPreferredSize().height)); 69 70 Box vBox = Box.createVerticalBox(); 71 vBox.add(new JLabel("New feature name")); 72 vBox.add(newFeatureField); 73 box.add(vBox); 74 box.add(Box.createHorizontalStrut(5)); 75 76 newValueField = new JTextField(10); 77 newValueField.setMaximumSize(new Dimension(Integer.MAX_VALUE, 78 newValueField. 79 getPreferredSize().height)); 80 81 vBox = Box.createVerticalBox(); 82 vBox.add(new JLabel("New feature value")); 83 vBox.add(newValueField); 84 box.add(vBox); 85 box.add(Box.createHorizontalStrut(5)); 86 87 addNewBtn = new JButton("Add feature"); 88 box.add(addNewBtn); 89 90 this.add(box); 91 this.add(Box.createVerticalGlue()); 92 93 }// protected void initGuiComponents() 94 95 protected void initListeners(){ 96 addNewBtn.addActionListener(new ActionListener() { 97 public void actionPerformed(ActionEvent e) { 98 String name = newFeatureField.getText(); 99 String value = newValueField.getText(); 100 if(name != null){ 101 features.put(name, value); 102 tableModel.fireTableDataChanged(); 103 newFeatureField.setText(""); 104 newValueField.setText(""); 105 } 106 } 107 }); 108 } 109 110 public void setFeatureBearer(FeatureBearer newResource) { 111 if(newResource == null){ 112 resource = null; 113 features = null; 114 }else{ 115 resource = newResource; 116 features = resource.getFeatures(); 117 } 118 tableModel.fireTableDataChanged(); 119 }// public void setFeatureBearer(FeatureBearer newResource) 120 121 public void setTarget(Object target) { 122 if(target == null || target instanceof FeatureBearer){ 123 setFeatureBearer((FeatureBearer)target); 124 }else{ 125 throw new IllegalArgumentException( 126 "FeatureEditors can only be used with FeatureBearer!\n" + 127 target.getClass().toString() + " is not a FeatureBearer!"); 128 } 129 }//public void setResource(Resource resource) 130 131 public void setHandle(Handle handle){ 132 //NOP 133 } 134 135 136 public FeatureBearer getFeatureBearer() { 137 return resource; 138 } 139 140 XJTable table; 141 FeaturesTableModel tableModel; 142 private FeatureBearer resource; 143 FeatureMap features; 144 JTextField newFeatureField; 145 JTextField newValueField; 146 147 JButton addNewBtn; 148 149 class FeaturesTableModel extends AbstractTableModel{ 150 public int getColumnCount(){ 151 return 2; 152 } 153 154 public int getRowCount(){ 155 return features == null ? 0 : features.size(); 156 } 157 158 public String getColumnName(int columnIndex){ 159 switch(columnIndex){ 160 case 0: return "Feature"; 161 case 1: return "Value"; 162 default: return "?"; 163 } 164 }//public String getColumnName(int columnIndex) 165 166 public Class getColumnClass(int columnIndex){ 167 switch(columnIndex){ 168 case 0: return String.class; 169 case 1: return Object.class; 170 default: return Object.class; 171 } 172 } 173 174 public boolean isCellEditable(int rowIndex, 175 int columnIndex){ 176 if(features == null) return false; 177 return rowIndex == features.size() 178 || 179 ((!((String)table.getModel().getValueAt(rowIndex, 0)). 180 startsWith("gate.")) 181 ); 182 }// public boolean isCellEditable 183 184 public Object getValueAt(int rowIndex, 185 int columnIndex){ 186 if(features == null) return null; 187 List keys = new ArrayList(features.keySet()); 188 Collections.sort(keys); 189 Object key = keys.get(rowIndex); 190 switch(columnIndex){ 191 case 0:{ 192 return key; 193 } 194 case 1:{ 195 return features.get(key) == null ? "" : features.get(key).toString(); 196 } 197 default:{ 198 return null; 199 } 200 } 201 }// public Object getValueAt 202 203 public void setValueAt(Object aValue, 204 int rowIndex, 205 int columnIndex){ 206 207 if(columnIndex == 0) { 208 //the name of the feature changed 209 //if the name is null or empty the feature will be deleted 210 String oldName = (String)getValueAt(rowIndex, 0); 211 Object oldValue = features.remove(oldName); 212 if(aValue != null && !aValue.equals("")){ 213 features.put(aValue, oldValue); 214 } 215 } else { 216 //the value of a feature changed 217 features.put(getValueAt(rowIndex, 0), aValue); 218 } 219 fireTableDataChanged(); 220 }// public void setValueAt 221 222 }///class FeaturesTableModel extends DefaultTableModel 223 /* 224 class FeaturesTableRenderer extends DefaultTableCellRenderer{ 225 public Component getTableCellRendererComponent(JTable table, 226 Object value, 227 boolean isSelected, 228 boolean hasFocus, 229 int row, 230 int column){ 231 232 super.getTableCellRendererComponent(table, value, false, hasFocus, 233 row, column); 234 setEnabled(table.isCellEditable(row, column)); 235 return this; 236 } 237 238 }// class FeaturesTableRenderer 239 */ 240 }// class FeaturesEditor
|
FeaturesEditor |
|