LGPL page

DJF - Desktop Java Forms

Djf is Desktop Java Forms, a compact master-detail UI library like FoxBase, but based on Swing. Djf uses Hibernate mapping concepts for data, for component layout - Miglayout and RSyntaxTextArea for text panels.
You can see almost all examples of forms definition, data bindings and assistances in demo applications.
After downloading you can run this demo: java -jar djf-demo-1.2-standalone.jar
Djf - легковесная master-detail библиотека на базе Swing, опирающаяся на концепции ORM Hibernate и использующая Miglayout для компоновки, а также RSyntaxTextArea для подсветки текстовых панелей. В библиотеке сделана реализация на перемещение между UI элементами без использования мыши (как это было в 90-х на FoxBase :)

Desktop Java Forms a compact master-detail UI library

Main features of Desktop Java Forms:
  • Easy CRUD operations.
  • View relationships between parent and multiple types of children. There can be various combinations, for example:
    - master table and its detail table(s);
    - master table and its nested detail table(s);
    - master table and its several detail fields with table(s);
    - several master tables and their detail table(s);
  • Reusing components, such as forms, panels and beans.
  • Each form has zero to n models and one control panel with following buttons: add record, refresh form, delete record, save, exit form.
  • Each form invokes another form (there is no limit).
  • Moving between UI-items without mouse (like in DOS forms) by using tab button, up-down arrows (with CTRL combination for text panels)
  • Adaptive column display in the grid depending on the resolution.
  • Shows wait panel during execution of long operations.
  • Supports the following widgets: table, tgrid (tree based on table), combobox and parent-child (linked) combobox, label, text, int, long, num, short, byte, date, textarea, checkbox, period, password, file, phone.
  • Supports user activity log.

This library and releases with demo are hosted on git https://github.com/smart-flex/Djf.

Библиотека и демо-версия размещена на git https://github.com/smart-flex/Djf.

DbfEngine Java API

DbfEngine - a Java API to read, write, append and clone xBase(DBASE, Foxpro dbf files). It also can be used as dbf reader java tools.
Also API allows read memory files (.mem) of Foxpro. Samples for both operations you may see at DbfEngine javadoc.

This API is pure lightweight library without memory consumption and any third party libraries (there are no java loggers and etc.)
The DBF Java API is intended as engine for data exchange purposes.


Engine is very small and fast.
API for reading is made as iterator, API for writing is made in manner as JDBC statement. It is allows to write compact Java code. See code samples below.

Also you can look inside your dbf file by invoking it through command line:

java -jar dbfEngine-1.12.jar your.dbf

The result of parsing dbf header and content will be placed into textual file.


This version was tested under MS Foxpro 2.6 without memo field support.


DbfEngine requires JDK 1.6 or higher.


DbfEngine is issued on under the GNU Lesser General Public License. For further information click here.


You may download DbfEngine 1.12 (2021-APR-25) version binary code here. The source cpde you may get in GitHub repository.


If this library was useful for your project please publish the link to this page.

If you have any questions or suggestions please do not hesitate to ask me by ask@smart-flex.ru.
DbfEngine - это Java API для чтения, записи xBase (DBASE, Foxpro) файлов. Также это API позволяет выполнять чтение .mem файлов для Foxpro. Примеры операций с .dbf и .mem файлами вы можете просмотреть в DbfEngine javadoc.

API представляет собой легковесную библиотеку без использования сторонних библиотек. Библиотека предназначена для решения задач обмена данными. В частности ее использует РКЦ флекс для чтения реестров платежей из банков и для выгрузки данных в сторону организаций.


API очень компактная и быстрая в работе.
В части чтения данных API выполнена как традиционный итератор, в части записи данных API выполнена как jdbc Statement. Все это позволяет писать компактный код. Смотрите примеры ниже.

Также при помощи этой библиотеки вы можете "заглянуть" внутрь вашего dbf файла через вызов командной строки:

java -jar dbfEngine-1.12.jar your.dbf

Результат разбора шапки dbf файла и содержимого будет помещен в выходной текстовый файл.


Данная версия библиотеки проверена на dbf файлах MS Foxpro 2.6 без поддержки memo.


DbfEngine для своей работы требует JDK 1.6 или выше.


API выпущена под лицензией LGPL.


Вы можете скачать бинарную библиотеку версии 1.12 (2021-04-25) здесь, исходный код доступен в GitHub репозитории.


Если библиотека помогла вам, то мы были бы рады увидеть ссылку с вашего ресурса на эту страницу.

public class Fp26Reader {


      private static void testRead() {

            DbfIterator dbfIterator = DbfEngine.getReader(

                        Fp26Reader.class.getResourceAsStream("FP_26_SAMPLE.DBF"), null);


            while (dbfIterator.hasMoreRecords()) {

                  DbfRecord dbfRecord = dbfIterator.nextRecord();

                  String string = dbfRecord.getString("string");

                  float sumFloat = dbfRecord.getFloat("sum_f");

                  BigDecimal sumNumeric = dbfRecord.getBigDecimal("sum_n");

                  boolean bool = dbfRecord.getBoolean("bool_val");

                  Date date = dbfRecord.getDate("date_val");


                  System.out.println(string + " " + sumFloat + " " + sumNumeric + " "

                              + bool + " " + date);




      public static void main(String[] args) {






public class Fp26Writer {


      private static void testWrite() {

            DbfAppender dbfAppender = DbfEngine.getWriter("WRT_PERSON.DBF", DbfCodePages.Cp866);

            DbfColumn dc01 = new DbfColumn("magic", DbfColumnTypes.Logical, 0, 0);

            DbfColumn dc02 = new DbfColumn("actor", DbfColumnTypes.Character, 60, 0);

            DbfColumn dc03 = new DbfColumn("currdate", DbfColumnTypes.Date, 0, 0);

            DbfColumn dc04 = new DbfColumn("hit", DbfColumnTypes.Numeric, 10, 2);

            DbfColumn dc05 = new DbfColumn("forever", DbfColumnTypes.Logical, 0, 0);

            dbfAppender.defineColumns(dc01,dc02, dc03, dc04, dc05);


            DbfStatement statement = dbfAppender.getStatement();

            statement.setString("actor", "Chuck Norris");

            statement.setDate("currdate", new Date());

            statement.setBigDecimal("hit", new BigDecimal("500.5"));



            statement.setBoolean("magic", Boolean.TRUE);

            statement.setString("actor", "Bruce Lee");

            statement.setBigDecimal("hit", new BigDecimal("1000.10"));

            statement.setBoolean("forever", Boolean.TRUE);





      public static void main(String[] args) {





работает с 1995 года