Библиотека dbSwing: проблема с JdbTable
( Вадим Криц )
Не все, кто работает с JBuilder 4 Enterprise, наверное, заметили странное поведение JdbTable. А именно, если у DataSet на который она ссылается одно из пропертей (readOnly = true, editable = false, enableInsert = false), или у самой JdbTable editable = false, то навигация по стрелке вниз не работает. Ошибка находится в классе AppendRowAction.
Два варианта решения этой проблемы: 1.Можно создать расширение класса от JdbTable:
import java.awt.event.*;
import javax.swing.*;
import com.borland.dbswing.*;
import com.borland.dx.dataset.*;
public class JdbTableEx extends JdbTable {
private DataSet dataSet;
public JdbTableEx() {
super();
}
private class AppendRowAction extends AbstractAction {
private AppendRowAction() {
super("append-row");
}
public void actionPerformed(ActionEvent e) {
if (dataSet != null) {
boolean readOnly = false;
if (dataSet instanceof StorageDataSet) {
readOnly = ((StorageDataSet) dataSet).isReadOnly();
}
try {
if (!dataSet.atLast()) {
dataSet.next();
}
else {
if (!readOnly && JdbTableEx.this.isEditable() &&
dataSet.isEnableInsert() && !dataSet.isEditingNewRow() &&
dataSet.isEditable()) {
dataSet.insertRow(false);
}
}
}
catch (DataSetException ex) {
DBExceptionHandler.handleException(dataSet, JdbTableEx.this, ex);
}
}
}
}
public void updateUI() {
super.updateUI();
unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
registerKeyboardAction(new AppendRowAction(),
KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0),
JComponent.WHEN_FOCUSED);
}
public void setDataSet(DataSet dataSet) {
super.setDataSet(dataSet);
this.dataSet = dataSet;
}
public DataSet getDataSet() {
return dataSet;
}
}
2.Можно переписать метод actionPerformed() в оригинальном классе AppendRowAction (JdbTable.java), перекомпилировать и заменить его в dbswing.jar
Ресурсы
- http://www.borland.com/techpubs/ jbuilder/jbuilder4/ref/ dbswing/Package-com.borland.dbswing.html Официальный ресурс посвящённый библиотеке dbSwing.
