package se.cambio.cds.gdl.editor.view.tables; import org.apache.commons.jxpath.JXPathContext; import se.cambio.cds.gdl.editor.util.GDLEditorLanguageManager; import javax.swing.*; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.util.Vector; public class TerminologyTable extends JTable { /** * */ private static final long serialVersionUID = 1L; private JXPathContext _context = null; public TerminologyTable(JXPathContext context){ _context = context; this.setModel(new TerminologyTableModel()); Vector<String> columnIdentifiers = new Vector<String>(); columnIdentifiers.add(GDLEditorLanguageManager.getMessage("Code")); columnIdentifiers.add(GDLEditorLanguageManager.getMessage("Text")); columnIdentifiers.add(GDLEditorLanguageManager.getMessage("Description")); getTerminologyTableModel().setColumnIdentifiers(columnIdentifiers); this.getColumnModel().getColumn(0).setMaxWidth(80); final TerminologyTableCellEditor cellEditor = new TerminologyTableCellEditor(); this.getColumnModel().getColumn(1).setCellEditor(cellEditor); this.getColumnModel().getColumn(2).setCellEditor(cellEditor); this.putClientProperty("terminateEditOnFocusLost", true); /* this.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { super.focusLost(e); cellEditor.stopCellEditing(); } });*/ } public TerminologyTableModel getTerminologyTableModel(){ return (TerminologyTableModel)getModel(); } public boolean isCellEditable(int row, int column) { if (column==0){ return false; }else{ return true; } } public class TerminologyTableModel extends DefaultTableModel{ private static final long serialVersionUID = 1L; } public void updateResults(TerminologyTableCellEditor otce){ String value = (String)otce.getCellEditorValue(); int row = otce.getRow(); int column = otce.getColumn(); String gtCode = (String)getTerminologyTableModel().getValueAt(row, 0); String attribute = column==1?"text":"description"; _context.setValue(gtCode+"/"+attribute, value); } private class TerminologyTableCellEditor extends DefaultCellEditor{ private int _row; private int _column; public TerminologyTableCellEditor() { super(new JTextField()); this.addCellEditorListener(new CellEditorListener() { public void editingStopped(ChangeEvent e) { Object obj = e.getSource(); if (obj instanceof TerminologyTableCellEditor){ updateResults((TerminologyTableCellEditor)obj); } } public void editingCanceled(ChangeEvent e) { } }); } public int getRow(){ return _row; } public int getColumn(){ return _column; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { _row = row; _column = column; return super.getTableCellEditorComponent(table, value, isSelected, row, column); } } } /* * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 2.0/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 2.0 (the 'License'); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an 'AS IS' basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * * The Initial Developers of the Original Code are Iago Corbal and Rong Chen. * Portions created by the Initial Developer are Copyright (C) 2012-2013 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Software distributed under the License is distributed on an 'AS IS' basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * ***** END LICENSE BLOCK ***** */