Witam, poszukuje osoby która by mi pomogła zrobić specyfikacje mojego projektu. Chodzi mi o arkusz kalkulacyjny który mam juz napisany w Javie. Gdyby był ktoś chętny mi pomoć oto kod programu.

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;



public class SpreadSheet extends JFrame {
        // ********************************************************
        class RowHeaderRenderer extends JLabel implements TableCellRenderer {

                RowHeaderRenderer(JTable table) {
                        JTableHeader header = table.getTableHeader();
                        setOpaque(true);
                        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
                        setHorizontalAlignment(CENTER);
                        setForeground(header.getForeground());
                        setBackground(header.getBackground());
                        setFont(header.getFont());
                }

                @Override
                public Component getTableCellRendererComponent(JTable table,
                                Object value, boolean isSelected, boolean hasFocus, int row,
                                int column) {
                        this.setText((row + 1) + "");
                        return this;
                }
        }

        // *********************************************************
        class SimpleTableModel extends DefaultTableModel {

                Formula2 formula = new Formula2();

                public SimpleTableModel(int rowCount, int columnCount) {
                        super(rowCount, columnCount);
                }

                @Override
                public Object getValueAt(int row, int column) 
                {
                       return formula.getValue(getKey(row, column));    
                }

                public Object getFormula(int row, int column) 
                {
                        return formula.getFormula(getKey(row,column));
                }

                @Override
                public void setValueAt(Object value, int row, int column) 
                {
                       	formula.define(getKey(row,column),value.toString());
                        table.repaint();
                }
                public void reset()
                {
                	formula.clear();
                	model.setRowCount(0);
                	model.setRowCount(ROW_COUNT);
                }
                public Properties getProperties()
                {
                	return formula.getProperties();
                }
                String getKey(int row, int column)
                {
                	return Character.toString((char) (column + 65)) + "" + (row + 1);
                }
        }

        // *********************************************************

        final int ROW_COUNT = 50;
        final int COLUMN_COUNT = 25;


        JTable table;
        JTable rowHead;
        SimpleTableModel model;
        JTextField evalField;

        public SpreadSheet() {
                super("Arkusz Kalkulacyjny");
                zrobGUI();
                podlaczZadzenia();
                zerujTabele();
                this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                this.setVisible(true);
        }

        private void zerujTabele() {
                model.reset();
                
        }

        private void zapisz() {

                JFileChooser fc = new JFileChooser();
                int zwrwartosc = fc.showSaveDialog(null); // do zapisu
                if (zwrwartosc == JFileChooser.APPROVE_OPTION)
                {
						File outFile = fc.getSelectedFile(); // pobiera ścieżkę pliku
                        Properties props = model.getProperties();
                        try 
                        {
                             props.store(new FileOutputStream(outFile),"SpreadSheet");   
                        } 
                        catch (Exception e) 
                        {
                                System.out.println(e);
                        }
                }
        }

        private void odczataj() {
                JFileChooser fc = new JFileChooser();
                int zwrwartosc = fc.showOpenDialog(null); // do zapisu
                // pobiera ścieżkę pliku
                if (zwrwartosc == JFileChooser.APPROVE_OPTION) 
                {
						zerujTabele();
                        File inFile = fc.getSelectedFile();
                        try {
                                Properties props = model.getProperties();
                                props.load(new FileInputStream(inFile));

                        } catch (Exception e) {
                                System.out.println(e);
                        }
                }
        }

        public void Autorzy() {

                JDialog nowe = new JDialog(this,"Autorzy",true);
               
                nowe.setResizable(false);
       
                nowe.setLayout(new GridLayout(4,1));
                nowe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                nowe.add(new JLabel("1. Emil Jędrzejewski"));
                nowe.add(new JLabel("2. Przemysław Oleksiak"));
                nowe.add(new JLabel("3. Daniel Dzięgielewski"));
                nowe.add(new JLabel("4. Rafał Kostka"));
                
               
               
                nowe.pack();
               
                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                // Determine the new location of the window
                int w = nowe.getSize().width;
                int h = nowe.getSize().height;
                int x = (dim.width - w) / 2;
                int y = (dim.height - h) / 2;

                // Move the window
                nowe.setLocation(x, y);
               
                nowe.setVisible(true);

        }

        private void addMenuItem(JMenu menu,String title, ActionListener actionListener){
         JMenuItem mi = new JMenuItem(title);
         mi.setText(title);
         mi.addActionListener(actionListener);
         menu.add(mi);
        }
       
        private void zrobGUI() {

                JMenuBar mb = new JMenuBar();
                JMenu menu = new JMenu("Plik");

                menu.addSeparator();
                addMenuItem(menu,"Zapisz",new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                                zapisz();
                        }
                });
                addMenuItem(menu,"Otworz",new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                                odczataj();
                        }
                });
                menu.addSeparator();
               
                addMenuItem(menu,"Koniec",new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                                System.exit(0);
                        }
                });

                mb.add(menu);

                JMenu menu2 = new JMenu("Tabela");
                addMenuItem(menu2,"Nowa",new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                                zerujTabele();
                        }
                });
                mb.add(menu2);
               
                JMenu menu1 = new JMenu("O programie");
                addMenuItem(menu1,"Autorzy",new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                        Autorzy();
                        }
                });
                mb.add(menu1);

                table = new JTable();
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                model = new SimpleTableModel(ROW_COUNT, COLUMN_COUNT);

                table.setModel(model);

                rowHead = new JTable();
                rowHead.setModel(new DefaultTableModel(ROW_COUNT, 1));
                LookAndFeel.installColorsAndFont(rowHead, "TableHeader.background",
                                "TableHeader.foreground", "TableHeader.font");
                rowHead.setIntercellSpacing(new Dimension(0, 0));
                Dimension d = rowHead.getPreferredScrollableViewportSize();
                d.width = rowHead.getPreferredSize().width;
                rowHead.setPreferredScrollableViewportSize(d);
                rowHead.setRowHeight(table.getRowHeight());
                rowHead.setDefaultRenderer(Object.class, new RowHeaderRenderer(table));

                JScrollPane sp = new JScrollPane(table);
                sp.setRowHeaderView(rowHead);
                add(sp, BorderLayout.CENTER);

                JPanel editPanel = new JPanel();
                editPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
                editPanel.add(new JLabel("Fromula:"));

                evalField = new JTextField();
                evalField.setColumns(50);
                editPanel.add(evalField);

                setJMenuBar(mb);
                add(editPanel, BorderLayout.NORTH);

                pack();
                this.setLocationRelativeTo(null);
        }

        private void podlaczZadzenia() {

                ListSelectionListener listener = new ListSelectionListener() {
                        @Override
                        public void valueChanged(ListSelectionEvent e) {
                                int col = table.getSelectedColumn();
                                int row = table.getSelectedRow();
                                if (col < 0 || row < 0)
                                        return;
                                evalField.setText(model.getFormula(row, col) + "");

                        }
                };

                table.getColumnModel().getSelectionModel().addListSelectionListener(
                                listener);
                table.getSelectionModel().addListSelectionListener(listener);

                evalField.addKeyListener(new KeyAdapter() {

                        @Override
                        public void keyPressed(KeyEvent e) {
                                int key = e.getKeyCode();
                                if (key == KeyEvent.VK_ENTER) {
                                        int col = table.getSelectedColumn();
                                        int row = table.getSelectedRow();
                                        if (col < 0 || row < 0)
                                                return;
                                        model.setValueAt(evalField.getText(), row, col);
                                }
                        }

                });

        }


        public static void main(String[] args) {
                new SpreadSheet();
        }
}