Moduł dodawnia wiersza.

0

Witam. Potrzebuje modułu dodawania wiersza z danymi z panelu AddPanel.

Tutaj pliki źródłowe:
http://www19.zippyshare.com/v/7059302/file.html

Może ktoś to opanować? Potrzebuje sobie z tym poradzić do piątku, dla wprawnego programisty to pestka. Pomoże ktoś? Pozdrawiam serdecznie

0

Do rozwiazania problemu moze posluzyc wzorzec: Observer, ktory czesciowo, mniej lub bardziej swiadomie, juz zaimplementowales uzywajac obiektow klasy ActionListener.
W Twoim przypadku obiekt obserwujacy zachowanie AddPanel musi byc powiadomiony, kiedy uzytkownik konczy wprowadzac dane (klikajac odpowiedni przycisk), wykryc, jaka akcja ma byc podjeta (zapisanie/anulowanie zmian) i w przypadku wybrania zapisu danych, pobrac odpowiednie wartosci z okna. Do tego ostatniego mozna napisac odpowiednia metode, zwracajaca dane opakowane w konkretny obiekt, ktory nastepnie bedzie przekazany dalej.

PS. zwroc uwage, ze NetBeans oferuje sporo mechanizmow "sprzatania" kodu (naprawa importow, wyrownywanie wciec, itd.). Polecam rowniez: http://java.sun.com/docs/codeconv/

0

No tak ale ja nie wiem jak to dalej zrobić, może jakieś konkretniejsze sugestie? Przykłady?

0
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;

interface DialogListener {
    void dialogClosed();
}

public class JDialogTest extends JFrame implements ActionListener, DialogListener {
	private final JButton btnShow;
	private JSubDialog jsd;
	
	public JDialogTest() {
	    super("JDialog data passing");
	    setSize(300, 200);
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	    btnShow = new JButton("Show sub-dialog");
	    btnShow.addActionListener(this);
	    getContentPane().add(btnShow);
	}
	
	public void actionPerformed(ActionEvent event) {
	    if(event.getSource() == btnShow) {
	        // modal dialog
	        // jsd = new JSubDialog(true);
	        // jsd.setVisible(true);
	        // if(!jsd.isCanceled()) {
	        //     System.out.println(jsd.getDialogContent());
            // }
            
            // non-modal dialog
            jsd = new JSubDialog(false);
            jsd.setDialogListener(this);
            jsd.setVisible(true);
	    }
	}
	
	public void dialogClosed() {
	    if(!jsd.isCanceled()) {
	        System.out.println(jsd.getDialogContent());
        }
	}
	
	public static final void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
		    public void run() {
			    new JDialogTest().setVisible(true);
		    }
		});
	}
}

class JSubDialog extends JDialog implements ActionListener {
    private final JTextField txtName;
    private final JTextField txtSurname;
    private final JButton btnOk;
    private final JButton btnCancel;
    
    private boolean canceled;
    private DialogListener listener;
    
    JSubDialog(boolean modal) {
        setModal(modal);
        setSize(200, 200);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setLayout(new FlowLayout());
        
        txtName = new JTextField(10);
        txtSurname = new JTextField(10);
        btnOk = new JButton("OK");
        btnOk.addActionListener(this);
        btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(this);

        add(txtName);
        add(txtSurname);
        add(btnOk);
        add(btnCancel);
    }
    
    public void setDialogListener(DialogListener listener) {
        this.listener = listener;
    }
    
    public Person getDialogContent() {
        return new Person(txtName.getText(), txtSurname.getText());
    }
    
    public boolean isCanceled() {
        return canceled;
    }
        
    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        canceled = (source == btnCancel);
        if(listener != null) {
            listener.dialogClosed();
        }
        dispose();
    }
}

class Person {
    private String name;
    private String surname;
    
    public Person(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }
    
    public String toString() {
        return name + " " + surname;
    }
}

Tego typu rozwiazanie jest technicznie poprawne, zarowno dla modalnych i niemodalnych okien.

0

W moim kodzie w
BeanDataModel mamy linijke
public void addRow(T obj) {
        int rowIndex = rows.size();
        rows.add(obj);
        fireTableRowsInserted(rowIndex, rowIndex);
    }

W BeanTableGUI linijka:
if (e.getActionCommand().equals("cmd:confirm2")){
//nie wiem co wpisac
}

Chciałbym zrobić dodawanie rekordu do tabeli przy pomocy funkcji addRow. Problem polega na tym ze nie wiem co wpisać w BeanTableGUI dokładnie w powyższej linijce żeby to zadziałało. O takie coś mi konkretnie chodzi - 02Eh. Ty napisałeś odrębny program do dodawania a nie o to mi chodziło. Ja chce dodać wiersz do tabeli, a dane będą pochodzić z formularza który już jest zrobiony. Zamieszczam to na czym ogólnikowo mam bazować. Pozdrawiam

0

Zapomniałem o plikach....

http://www4.zippyshare.com/v/30921179/file.html

Z góry dziękuje

0

Nikt nie pomoże więcej? :-( :-( :-( :-(

0

Witam ponownie,
w podanym przeze mnie kodzie jest pokazana jedna z metod wyciagania danych z formularza w osobnym oknie (innym sposobem mogloby byc np. stworzenie interfejsu kontrolera modelu i przekazanie go do okna z formularzem, ale to moze skomplikowac sytuacje i srednio sprzyja zasadzie loose-couplingu). Zasade dzialania opisalem w pierwszym moim poscie, wiec wystarczy ja przeniesc na Twoja aplikacje.
Ale do rzeczy. Twoj formularz, klasa AddPanel, powinien posiadac metode, ktora bedzie zwracac dane wpisane przez uzytkownika. W moim przykladzie jest to:

public Person getDialogContent() {
        return new Person(txtName.getText(), txtSurname.getText());
}

ktora opakowywuje imie i nazwisko w klase Person. U Ciebie taka metoda powina zwrocic obiekt klasy Employee, bo taki typ przechowujesz w Swoim modelu. Na koncu wystarczy dodac obiekt do modelu, metoda addRow(T obj), o ktorej wspomniales.

0

Może być mi ciężko to ogarnąć bo nie do końca rozumiem Twoją myśl. Bo ja nadal nie wiem co wpisać pod AddRow... i o to mi chodzi.... :( a czas ucieka... :((

0

Może być mi ciężko to ogarnąć bo nie do końca rozumiem Twoją myśl. Bo ja nadal nie wiem co wpisać pod AddRow... i o to mi chodzi.... :( a czas ucieka... :(( do czego to się ma odwołać?

odwołać :x ??!!!????

0

Hmm. Temu, co podrzuciles bardzo daleko do doskonalosci (IYKWIM) i trzeba by powaznie przemyslec przepisanie tego kodu na spokojnie, bo w tym momencie z kazda zmiana brniemy w kolejne problemy. Ale nic, skoro jestesmy tu zeby pomoc, a czas nagli:

if (e.getActionCommand().equals("cmd:confirm2")) {
    //pozostaje miec nadzieje, ze nasz Employee jest lub dziedziczy po T
    try {
        T employee = (T)addpanel.getFormContent();
        if(employee != null) {
            model.addRow(employee);
        }
    } catch(ClassCastException cce) {
        System.err.println("Casting failed: " + cce.getMessage());
    }
}
public Employee getFormContent() {
    Employee employee = new Employee();
    //tutaj wyciaganie danych z pol formularza
    return employee;
}

Nie robcie tego w domu! HTH.

1 użytkowników online, w tym zalogowanych: 0, gości: 1