|
What this is
This file is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.refactoring.ui;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.lang.reflect.Modifier;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.jmi.reflect.RefObject;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import org.netbeans.modules.refactoring.api.ui.ParametersPanel;
import org.netbeans.jmi.javamodel.*;
import org.openide.util.NbBundle;
/**
* Panel contains components for signature change. There is table with
* parameters, you can add parameters, reorder parameteres or remove not
* used paramaters (not available yet). You can also change access modifier.
*
* @author Pavel Flaska
*/
public class ChangeParametersPanel extends javax.swing.JPanel {
RefObject refactoredObj;
ParamTableModel model;
private ParametersPanel parent;
private static Action editAction = null;
private static final String[] modifierNames = {
"public", // NOI18N
"protected", // NOI18N
"", // NOI18N
"private" // NOI18N
};
private static final String[] columnNames = {
getString("LBL_ChangeParsColName"), // NOI18N
getString("LBL_ChangeParsColType"), // NOI18N
getString("LBL_ChangeParsColDefVal"), // NOI18N
getString("LBL_ChangeParsColOrigIdx") // NOI18N
};
// modifier items in combo - indexes
private static final int MOD_PUBLIC_INDEX = 0;
private static final int MOD_PROTECTED_INDEX = 1;
private static final int MOD_DEFAULT_INDEX = 2;
private static final int MOD_PRIVATE_INDEX = 3;
private static final String ACTION_INLINE_EDITOR = "invokeInlineEditor"; //NOI18N
/** Creates new form ChangeMethodSignature */
public ChangeParametersPanel(RefObject refactoredObj, ParametersPanel parent) {
this.refactoredObj = refactoredObj;
if (refactoredObj instanceof CallableFeature) {
initTableData();
initComponents();
setModifier();
previewChange.setText(genDeclarationString());
} else {
// Title has to be set also in case of error. (No initialization
// is provided in that case and initComponents is not called.)
setName(getString("LBL_TitleChangeParameters")); // NOI18N
}
this.parent = parent;
}
protected DefaultTableModel getTableModel() {
return model;
}
protected int getModifier() {
switch (modifiersCombo.getSelectedIndex()) {
case MOD_PRIVATE_INDEX: return Modifier.PRIVATE;
case MOD_DEFAULT_INDEX: return 0; /* no modifier */
case MOD_PROTECTED_INDEX: return Modifier.PROTECTED;
}
return Modifier.PUBLIC;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
java.awt.GridBagConstraints gridBagConstraints;
modifiersPanel = new javax.swing.JPanel();
modifiersLabel = new javax.swing.JLabel();
modifiersCombo = new javax.swing.JComboBox();
eastPanel = new javax.swing.JPanel();
buttonsPanel = new javax.swing.JPanel();
addButton = new javax.swing.JButton();
removeButton = new javax.swing.JButton();
moveUpButton = new javax.swing.JButton();
moveDownButton = new javax.swing.JButton();
fillPanel = new javax.swing.JPanel();
westPanel = new javax.swing.JScrollPane();
paramTable = new javax.swing.JTable();
paramTitle = new javax.swing.JLabel();
previewTitle = new javax.swing.JLabel();
previewChange = new javax.swing.JLabel();
setLayout(new java.awt.GridBagLayout());
setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(12, 12, 11, 11)));
setName(getString("LBL_TitleChangeParameters"));
modifiersPanel.setLayout(new java.awt.GridBagLayout());
modifiersLabel.setDisplayedMnemonic(getString("LBL_ChangeParsMods_MNEM").charAt(0));
modifiersLabel.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsMods"));
modifiersLabel.setLabelFor(modifiersCombo);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
modifiersPanel.add(modifiersLabel, gridBagConstraints);
modifiersCombo.setModel(new DefaultComboBoxModel(modifierNames));
modifiersCombo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
modifiersComboActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 12, 0, 0);
modifiersPanel.add(modifiersCombo, gridBagConstraints);
modifiersCombo.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_modifiersCombo"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
add(modifiersPanel, gridBagConstraints);
eastPanel.setLayout(new java.awt.GridBagLayout());
buttonsPanel.setLayout(new java.awt.GridBagLayout());
buttonsPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 11, 1, 1)));
addButton.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsAdd"));
addButton.setMnemonic(getString("LBL_ChangeParsAdd_MNEM").charAt(0));
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
buttonsPanel.add(addButton, gridBagConstraints);
addButton.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_ChangeParsAdd"));
removeButton.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsRemove"));
removeButton.setMnemonic(getString("LBL_ChangeParsRemove_MNEM").charAt(0));
removeButton.setEnabled(false);
removeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
buttonsPanel.add(removeButton, gridBagConstraints);
removeButton.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_ChangeParsRemove"));
moveUpButton.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsMoveUp"));
moveUpButton.setMnemonic(getString("LBL_ChangeParsMoveUp_MNEM").charAt(0));
moveUpButton.setEnabled(false);
moveUpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveUpButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
buttonsPanel.add(moveUpButton, gridBagConstraints);
moveUpButton.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_ChangeParsMoveUp"));
moveDownButton.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsMoveDown"));
moveDownButton.setMnemonic(getString("LBL_ChangeParsMoveDown_MNEM").charAt(0));
moveDownButton.setEnabled(false);
moveDownButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveDownButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
buttonsPanel.add(moveDownButton, gridBagConstraints);
moveDownButton.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_ChangeParsMoveDown"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
eastPanel.add(buttonsPanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
eastPanel.add(fillPanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(eastPanel, gridBagConstraints);
westPanel.setPreferredSize(new java.awt.Dimension(453, 100));
paramTable.setModel(model);
initRenderer();
paramTable.getSelectionModel().addListSelectionListener(getListener1());
paramTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
model.addTableModelListener(getListener2());
paramTable.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), ACTION_INLINE_EDITOR); //NOI18N
paramTable.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), ACTION_INLINE_EDITOR); //NOI18N
paramTable.getActionMap().put(ACTION_INLINE_EDITOR, getEditAction()); //NOI18N
paramTable.setSurrendersFocusOnKeystroke(true);
paramTable.setCellSelectionEnabled(false);
paramTable.setRowSelectionAllowed(true);
paramTable.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE); //NOI18N
paramTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); //NOI18N
westPanel.setViewportView(paramTable);
paramTable.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("ACSD_paramTable"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(westPanel, gridBagConstraints);
paramTitle.setDisplayedMnemonic(getString("LBL_ChangeParsParameters_MNEM").charAt(0));
paramTitle.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
paramTitle.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsParameters"));
paramTitle.setLabelFor(paramTable);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 2, 0);
add(paramTitle, gridBagConstraints);
previewTitle.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsPreview"));
previewTitle.setName(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsPreview"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(11, 0, 0, 0);
add(previewTitle, gridBagConstraints);
previewTitle.getAccessibleContext().setAccessibleName(java.util.ResourceBundle.getBundle("org/netbeans/modules/refactoring/ui/Bundle").getString("LBL_ChangeParsPreview"));
previewChange.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(previewChange, gridBagConstraints);
}//GEN-END:initComponents
private void modifiersComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modifiersComboActionPerformed
previewChange.setText(genDeclarationString());
}//GEN-LAST:event_modifiersComboActionPerformed
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
acceptEditedValue();
int[] selectedRows = paramTable.getSelectedRows();
ListSelectionModel selectionModel = paramTable.getSelectionModel();
for (int i = 0; i < selectedRows.length; ++i)
model.removeRow(selectedRows[i] - i);
selectionModel.clearSelection();
}//GEN-LAST:event_removeButtonActionPerformed
private void moveDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveDownButtonActionPerformed
doMove(1);
}//GEN-LAST:event_moveDownButtonActionPerformed
private void moveUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveUpButtonActionPerformed
doMove(-1);
}//GEN-LAST:event_moveUpButtonActionPerformed
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
acceptEditedValue();
int rowCount = model.getRowCount();
model.addRow(new Object[] { "par" + rowCount, "Object", "", new Integer(-1) }); // NOI18N
}//GEN-LAST:event_addButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addButton;
private javax.swing.JPanel buttonsPanel;
private javax.swing.JPanel eastPanel;
private javax.swing.JPanel fillPanel;
private javax.swing.JComboBox modifiersCombo;
private javax.swing.JLabel modifiersLabel;
private javax.swing.JPanel modifiersPanel;
private javax.swing.JButton moveDownButton;
private javax.swing.JButton moveUpButton;
private javax.swing.JTable paramTable;
private javax.swing.JLabel paramTitle;
private javax.swing.JLabel previewChange;
private javax.swing.JLabel previewTitle;
private javax.swing.JButton removeButton;
private javax.swing.JScrollPane westPanel;
// End of variables declaration//GEN-END:variables
private ListSelectionListener getListener1() {
return new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (!lsm.isSelectionEmpty()) {
// Find out which indexes are selected.
int minIndex = lsm.getMinSelectionIndex();
int maxIndex = lsm.getMaxSelectionIndex();
setButtons(minIndex, maxIndex);
boolean enableRemoveBtn = true;
for (int i = minIndex; i <= maxIndex; i++) {
enableRemoveBtn = model.isCellEditable(i, 0);
if (!enableRemoveBtn)
break;
}
removeButton.setEnabled(enableRemoveBtn);
}
else {
moveDownButton.setEnabled(false);
moveUpButton.setEnabled(false);
removeButton.setEnabled(false);
}
}
};
}
private TableModelListener getListener2() {
return new TableModelListener() {
public void tableChanged(TableModelEvent e) {
// update buttons availability
int[] selectedRows = paramTable.getSelectedRows();
if (selectedRows.length == 0) {
removeButton.setEnabled(false);
}
else {
boolean enableRemoveBtn = true;
for (int i = 0; i < selectedRows.length; i++) {
if (selectedRows[i] < model.getRowCount()) {
enableRemoveBtn = model.isCellEditable(selectedRows[i], 0);
if (!enableRemoveBtn)
break;
}
}
removeButton.setEnabled(enableRemoveBtn);
int min = selectedRows[0];
int max = selectedRows[selectedRows.length - 1];
setButtons(min, max);
}
// update preview
previewChange.setText(genDeclarationString());
parent.stateChanged(null);
}
};
}
private void initTableData() {
model = new ParamTableModel(columnNames, 0);
List params = ((CallableFeature) refactoredObj).getParameters();
int originalIndex = 0;
for (Iterator parIter = params.iterator(); parIter.hasNext(); ) {
Parameter par = (Parameter) parIter.next();
Type desc = par.getType();
String typeRepresentation = getTypeStringRepresentation(desc);
Object[] parRep = new Object[] { par.getName(), typeRepresentation, "", new Integer(originalIndex) };
model.addRow(parRep);
originalIndex++;
}
}
private static String getTypeStringRepresentation(Type desc) {
return desc.getName();
}
private boolean acceptEditedValue() {
TableCellEditor tce = paramTable.getCellEditor();
if (tce != null)
return paramTable.getCellEditor().stopCellEditing();
return false;
}
private void doMove(int step) {
acceptEditedValue();
ListSelectionModel selectionModel = paramTable.getSelectionModel();
int min = selectionModel.getMinSelectionIndex();
int max = selectionModel.getMaxSelectionIndex();
selectionModel.clearSelection();
model.moveRow(min, max, min + step);
selectionModel.addSelectionInterval(min + step, max + step);
}
private void setButtons(int min, int max) {
int r = model.getRowCount() - 1;
moveUpButton.setEnabled(min > 0 ? true : false);
moveDownButton.setEnabled(max < r ? true : false);
}
private void initRenderer() {
paramTable.removeColumn(paramTable.getColumnModel().getColumn(3));
Enumeration columns = paramTable.getColumnModel().getColumns();
TableColumn tc = null;
while (columns.hasMoreElements()) {
tc = (TableColumn) columns.nextElement();
tc.setCellRenderer(new DefaultTableCellRenderer());
}
}
private void setModifier() {
int mod = ((CallableFeature) refactoredObj).getModifiers();
if (Modifier.isPrivate(mod))
modifiersCombo.setSelectedIndex(MOD_PRIVATE_INDEX);
else if (Modifier.isProtected(mod))
modifiersCombo.setSelectedIndex(MOD_PROTECTED_INDEX);
else if (Modifier.isPublic(mod))
modifiersCombo.setSelectedIndex(MOD_PUBLIC_INDEX);
else
modifiersCombo.setSelectedIndex(MOD_DEFAULT_INDEX);
}
public String genDeclarationString() {
// generate preview for modifiers
// access modifiers
String mod = modifiersCombo.getSelectedIndex() != MOD_DEFAULT_INDEX /*default modifier?*/ ?
(String) modifiersCombo.getSelectedItem() + ' ' : ""; // NOI18N
StringBuffer buf = new StringBuffer(mod);
// other than access modifiers - using data provided by the element
// first of all, reset access modifier, because it is generated from combo value
String otherMod = Modifier.toString(((CallableFeature) refactoredObj).getModifiers() & 0xFFFFFFF8);
if (otherMod.length() != 0) {
buf.append(otherMod);
buf.append(' ');
}
// generate the return type for the method and name
// for the both - method and constructor
String name;
if (refactoredObj instanceof Method) {
Method method = (Method) refactoredObj;
buf.append(getTypeStringRepresentation(method.getType()));
buf.append(' ');
name = method.getName();
}
else {
// for constructor, get name from the declaring class
name = ((JavaClass) ((CallableFeature) refactoredObj).getDeclaringClass()).getSimpleName();
}
buf.append(name);
buf.append('(');
// generate parameters to the preview string
List[] parameters = (List[]) model.getDataVector().toArray(new List[0]);
if (parameters.length > 0) {
int i;
for (i = 0; i < parameters.length - 1; i++) {
buf.append((String) parameters[i].get(1));
buf.append(' ');
buf.append((String) parameters[i].get(0));
buf.append(',').append(' ');
}
buf.append((String) parameters[i].get(1));
buf.append(' ');
buf.append((String) parameters[i].get(0));
}
buf.append(')'); //NOI18N
return buf.toString();
}
private static String getString(String key) {
return NbBundle.getMessage(ChangeParametersPanel.class, key);
}
private static Action getEditAction() {
if (editAction == null) {
editAction = new EditAction();
}
return editAction;
}
private static void autoEdit(JTable tab) {
if (tab.editCellAt(tab.getSelectedRow(), tab.getSelectedColumn(), null) &&
tab.getEditorComponent() != null)
{
JTextField field = (JTextField) tab.getEditorComponent();
int len = field.getText().length();
field.setCaretPosition(field.getText().length());
field.requestFocusInWindow();
field.selectAll();
}
}
////////////////////////////////////////////////////////////////////////////
// INNER CLASSES
////////////////////////////////////////////////////////////////////////////
// this class is used for marking rows as read-only. If the user uses
// standard DefaultTableModel, rows added through its methods is added
// as a read-write. -- Use methods with Boolean paramater to add
// rows marked as read-only.
static class ParamTableModel extends DefaultTableModel {
public ParamTableModel(Object[] data, int rowCount) {
super(data, rowCount);
}
public boolean isCellEditable(int row, int column) {
Integer origIdx = (Integer) ((Vector) getDataVector().get(row)).get(3);
return origIdx.intValue() == -1 ? true : false;
}
} // end ParamTableModel
private static class EditAction extends AbstractAction {
public void actionPerformed(ActionEvent ae) {
autoEdit((JTable) ae.getSource());
}
}
// end INNERCLASSES
}
|