Hi All!
При редактировании ячеек (тип Double) значения не затираются, а дописываются в конец.
к примеру выделили ячейку с тек. значением 0.0 назимаем "5" — получаем 0.05, а хотелось бы 5
Здравствуйте, эйчЪ, Вы писали:
Ъ>Hi All! Ъ>При редактировании ячеек (тип Double) значения не затираются, а дописываются в конец. Ъ>к примеру выделили ячейку с тек. значением 0.0 назимаем "5" — получаем 0.05, а хотелось бы 5
А если ты два раза кликнешь на ячейке мышкой и нажмёшь "5" у тебя скорее всего запишеться 5, я прав .. ?
Здравствуйте, эйчЪ, Вы писали:
Ъ>Hi All! Ъ>При редактировании ячеек (тип Double) значения не затираются, а дописываются в конец. Ъ>к примеру выделили ячейку с тек. значением 0.0 назимаем "5" — получаем 0.05, а хотелось бы 5
А вообще — то приведи код твоего едитора ячеек , посмотрим что можно сделать ..
Здравствуйте, JITM, Вы писали:
JIT>Здравствуйте, эйчЪ, Вы писали:
Ъ>>Hi All! Ъ>>При редактировании ячеек (тип Double) значения не затираются, а дописываются в конец. Ъ>>к примеру выделили ячейку с тек. значением 0.0 назимаем "5" — получаем 0.05, а хотелось бы 5 JIT>А вообще — то приведи код твоего едитора ячеек , посмотрим что можно сделать ..
Да стандартно все.
.............
for(int j = 0; j < ArrayServiceNum.size(); j++){
row[j + 1] = new Double(Double.parseDouble(sService));
}
tModel_P.addRow(row);
jTable1.setModel(tModel_P);
.......................
Здравствуйте, эйчЪ, Вы писали:
Ъ>Да стандартно все.
Все "стандартно" наследуется от DefaultCellEditor и использхует конструктор:
public DefaultCellEditor(final JTextField textField) {
editorComponent = textField;
this.clickCountToStart = 2;
delegate = new EditorDelegate() {
public void setValue(Object value) {
textField.setText((value != null) ? value.toString() : "");
}
public Object getCellEditorValue() {
return textField.getText();
}
};
textField.addActionListener(delegate);
}
Интересное выделено болдом.
Есть и соответствующее свойство:
/**
* Specifies the number of clicks needed to start editing.
*
* @param count an int specifying the number of clicks needed to start editing
* @see #getClickCountToStart
*/public void setClickCountToStart(int count) {
clickCountToStart = count;
}
/**
* Returns the number of clicks needed to start editing.
* @return the number of clicks needed to start editing
*/public int getClickCountToStart() {
return clickCountToStart;
}
Пока не нашел места где символы аппендятся если редактирование начинается с ввода значения.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, эйчЪ, Вы писали:
полностью согласен ., правда я вот нашол пример работы с Double может поможет :
import SubMacroUtils.FormatBigDecimal;
import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.Component;
import java.awt.Toolkit;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;
/**
* Implements a cell editor that uses a formatted text field
* to edit Double values.
*/public class CellDoubleEditor extends DefaultCellEditor {
JFormattedTextField ftf;
DecimalFormat DoubleFormat;
private Double minimum, maximum, decimals;
private boolean DEBUG = false;
public CellDoubleEditor(double min, double max, int dec) {
super(new JFormattedTextField());
ftf = (JFormattedTextField)getComponent();
minimum = new Double(min);
maximum = new Double(max);
decimals = new Double(dec);
DoubleFormat = (DecimalFormat) NumberFormat.getNumberInstance();
DoubleFormat.setDecimalSeparatorAlwaysShown(true);
DoubleFormat.setMinimumFractionDigits(dec);
NumberFormatter doubleFormatter = new NumberFormatter(DoubleFormat);
doubleFormatter.setFormat(DoubleFormat);
doubleFormatter.setMinimum(minimum);
doubleFormatter.setMaximum(maximum);
ftf.setFormatterFactory(new DefaultFormatterFactory(doubleFormatter));
ftf.setValue(minimum);
ftf.setHorizontalAlignment(JTextField.TRAILING);
ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
//React when the user presses Enter while the editor is
//active. (Tab is handled as specified by
//JFormattedTextField's focusLostBehavior property.)
ftf.getInputMap().put(KeyStroke.getKeyStroke(
KeyEvent.VK_ENTER, 0),
"check");
ftf.getActionMap().put("check", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
if (!ftf.isEditValid()) { //The text is invalid.if (userSaysRevert()) { //reverted
ftf.postActionEvent(); //inform the editor
}
} else try { //The text is valid,
ftf.commitEdit(); //so use it.
ftf.postActionEvent(); //stop editing
} catch (java.text.ParseException exc) { }
}
});
}
//Override to invoke setValue on the formatted text field.public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected,
int row, int column) {
JFormattedTextField ftf =
(JFormattedTextField)super.getTableCellEditorComponent(
table, value, isSelected, row, column);
if (!Geral.StrEmpty(value.toString()))
ftf.setValue(value);
return ftf;
}
//Override to ensure that the value remains an Double.public Object getCellEditorValue() {
JFormattedTextField ftf = (JFormattedTextField)getComponent();
Object o = ftf.getValue();
if (o instanceof Double) {
return o;
} else if (o instanceof Integer) {
return new Double(((Integer)o).doubleValue());
} else if (o instanceof Number) {
return new Double(((Number)o).doubleValue());
} else {
if (DEBUG) {
System.out.println("getCellEditorValue: o isn't a Number");
}
try {
return DoubleFormat.parseObject(o.toString());
} catch (ParseException exc) {
System.err.println("getCellEditorValue: can't parse o: " + o);
return null;
}
}
}
//Override to check whether the edit is valid,
//setting the value if it is and complaining if
//it isn't. If it's OK for the editor to go
//away, we need to invoke the superclass's version
//of this method so that everything gets cleaned up.public boolean stopCellEditing() {
JFormattedTextField ftf = (JFormattedTextField)getComponent();
if (ftf.isEditValid()) {
try {
ftf.commitEdit();
} catch (java.text.ParseException exc) { }
} else { //text is invalidif (!userSaysRevert()) { //user wants to editreturn false; //don't let the editor go away
}
}
return super.stopCellEditing();
}
/**
* Lets the user know that the text they entered is
* bad. Returns true if the user elects to revert to
* the last good value. Otherwise, returns false,
* indicating that the user wants to continue editing.
*/protected boolean userSaysRevert() {
Toolkit.getDefaultToolkit().beep();
ftf.selectAll();
Object[] options = {"Corrigir","Reverter"};
int answer = JOptionPane.showOptionDialog(
SwingUtilities.getWindowAncestor(ftf),
"O valor deve estar entre "
+ minimum + " e "
+ maximum + ".\n"
+ "Você pode corrigir "
+ "ou reverter para o último valor válido.",
"Valor inválido digitado",
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE,
null,
options,
options[1]);
if (answer == 1) { //Revert!
ftf.setValue(ftf.getValue());
return true;
}
return false;
}
}