< Wstecz | Dalej >

Lekcja 2.6: Skonfigurowanie działań i powiązań w celu dodania nowego pracownika

W tej lekcji użytkownik umożliwi dodanie nowego rekordu pracownika w aplikacji Firmowa książka adresowa.

Ponieważ zachowanie aplikacji jest bardziej skomplikowane i dynamiczne podczas dodawania nowego pracownika, to ćwiczenie jest również bardziej złożone i wymaga ręcznego wprowadzenia pewnych zmian w kodzie źródłowym. Ponadto to ćwiczenie prezentuje pewne zaawansowane możliwości obiektów danych oraz stanowi kreatywny przykład jednego ze sposobów zastosowania konsolidatorów i obiektów danych w celu realizacji konkretnych wymagań.

Poniższa lista opisuje wymagane zachowanie aplikacji:

  • Po kliknięciu przycisku Nowy zostaną wykonane następujące czynności:
    • Wybór w tabeli pracowników zostanie anulowany i tabela zostanie wyłączona.
    • Anulowanie wyboru w tabeli spowoduje wyłączenie przycisku Usuń.
    • Wyłączone zostanie pole Filtr.
    • Z pól szczegółów zostaną usunięte wszystkie wartości z wyjątkiem identyfikatora nowego pracownika.
    • Tekst na przycisku Aktualizacja zostanie zmieniony na Dodaj.
  • Po kliknięciu przycisku Dodaj zostaną wykonane następujące czynności:
    • Wartości wprowadzone w polach szczegółów zostaną dodane do katalogu jako rekord nowego pracownika.
    • Tabela zostanie włączona, a wartości odświeżone.
    • Zostanie włączone pole Filtr.
    • Tekst na przycisku Dodaj zostanie ponownie zmieniony na Aktualizacja.

Dodawanie nowego obiektu danych źródła danych wywołującego metodę createNewFullEmployeeRecord()

Przykładowa usługa Web Service udostępnia usługę createNewFullEmployeeRecord zapewniającą nowy, pusty rekord zapełniany kolejnym dostępnym numerem identyfikatora pracownika. Ten pusty rekord można następnie zapełnić informacjami o pracowniku i przesłać z powrotem do usługi Web Service.

  1. Na palecie wizualnego edytora Java rozwiń szufladę Obiekty danych i wybierz pozycję Obiekt danych źródła danych.
  2. Przenieś wskaźnik myszy nad pusty obszar widoku projektowania lub wolny obszar formularza i kliknij lewym przyciskiem myszy, aby upuścić obiekt danych źródła danych. Nowy obiekt danych źródła danych zostanie dodany i wyświetlony w wolnym obszarze formularza:

    Obiekt danych źródła danych w wolnym obszarze. Nieskonfigurowany.

  3. Kliknij prawym przyciskiem myszy obiekt danych źródła danych i wybierz opcję Zmień nazwę pola. Zmień nazwę obiektu danych na newEmployeeRecord.
  4. Kliknij prawym przyciskiem myszy obiekt danych newEmployeeRecord i wybierz opcję Właściwości powiązań. Zostanie otwarte okno dialogowe Wiązanie danych.
  5. W polu Źródło danych wybierz obiekt webServiceDataSource.
  6. W polu Usługa wybierz metodę createNewFullEmployeeRecord().
  7. Kliknij przycisk OK.
W wolnym obszarze formularza widać, że obiekt danych źródła danych newEmployeeRecord jest powiązany z usługą Web Service.

Obiekt danych newEmployeeRecord połączony ze źródłem webServiceDataSource

Dodawanie podstawowego obiektu danych w celu ułatwienia przełączania obiektów danych

Ponieważ pola szczegółów i przycisk Aktualizacja wymagają przełączania trybów (w celu dokonania aktualizacji i utworzenia nowego pracownika), wymagają one powiązania z dwoma różnymi obiektami danych w różnym czasie. W celu ułatwienia tej czynności zostanie dodany podstawowy obiekt danych o nazwie switchingDataObject. Ten podstawowy obiekt danych będzie służył do przełączania powiązania pól tekstowych między obiektami selectedEmployeeRecord i newEmployeeRecord.

Nowy podstawowy obiekt danych wskazuje po prostu inny obiekt danych (selectedEmployeeRecord) zdefiniowany we wcześniejszym ćwiczeniu. Ten nowy obiekt danych będzie przydatny po utworzeniu metody informującej podstawowy obiekt danych o konieczności użycia wcześniej utworzonego obiektu newEmployeeRecord. Inaczej mówiąc, podstawowy obiekt danych będzie działał jako pośredni obiekt danych przełączający obiekty danych selectedEmployeeRecord i newEmployeeRecord, tym samym umożliwiając komponentom wizualnym aplikacji pracę z dwoma różnymi obiektami danych.
  1. Na palecie edytora wizualnego wybierz element Podstawowy obiekt danych i upuść go w wolnym obszarze formularza. Zostanie dodany obiekt basicDataObject.

    Podstawowy obiekt danych w wolnym obszarze formularza (nieskonfigurowany)

  2. Zmień nazwę obiektu danych na switchingDataObject
  3. W widoku Właściwości obiektu switchingDataObject ustaw właściwość sourceObject na wartość selectedEmployeeRecord. Wartość selectedEmployeeRecord można wybrać z menu rozwijanego w kolumnie Wartość właściwości.

    Teraz obiekt switchingDataObject odwołuje się do obiektu selectedEmployeeRecord i zawiera te same wartości:

    Obiekt switchingDataObject w wolnym obszarze formularza połączony z obiektem danych selectedEmployeeRecord

Ponowne wiązanie każdego pola pracownika z obiektem switchingDataObject

Chociaż każde z pól szczegółów pracownika jest już powiązane z obiektem selectedEmployeeRecord, należy teraz powiązać je z obiektem switchingDataObject. Po powiązaniu pól można dynamicznie przełączać się między obiektami danych tych pól w zależności od tego, czy następuje modyfikacja istniejącego rekordu pracownika czy też dodawany jest nowy rekord pracownika.

Dla każdego pola w sekcji Informacje o pracowniku należy wykonać poniższe czynności:
  1. Wybierz pole i kliknij zakładkę Wiązanie.
  2. W oknie dialogowym Powiązania danych pól wybierz obiekt switchingDataObject. Wcześniej pola te zostały powiązane z obiektem selectedEmployeeRecord.

    Okno dialogowe Powiązania danych pól wyświetlające pole lastNameField powiązane z właściwością lastName obiektu switchingDataObject

  3. Upewnij się, że pole jest nadal powiązane z poprawną właściwością obiektu danych i kliknij przycisk OK. Po wybraniu pola w widoku projektowania widać będzie, że linie konsolidatora wskazują teraz obiekt switchingDataObject.

    Pole szczegółów powiązane z obiektem switchingDataObject

Definiowanie flagi oraz metody aktualizacji i przełączania trybów

Poniższa metoda updateMode() sprawdza, czy flaga trybu jest ustawiona na tworzenie nowego rekordu, a następnie odpowiednio zmienia zachowanie aplikacji. Domyślnie flaga boolowska isNewMode ma wartość false, a metoda updateMode() włącza tabelę pracowników i pole filtru oraz ustawia tekst przycisku Aktualizuj na "Aktualizuj". Jeśli flaga isNewMode ma wartość true, tabela pracowników jest wyłączana, są anulowane wszystkie wybory, jest wyłączane pole filtru, a tekst na przycisku Aktualizuj jest zmieniany na "Dodaj".

Poniższy kod należy dodać do klasy DirectoryApp.java tuż przed ostatnim zamykającym nawiasem klamrowym:
private boolean isNewMode = false;
private void updateMode() {
   if (isNewMode) {
      getEmployeesTable().clearSelection();
      getEmployeesTable().setEnabled(false);
      getFilterField().setEditable(false);
      getUpdateCreateButton().setText("Dodaj");
   } else {
      getEmployeesTable().setEnabled(true);
      getFilterField().setEditable(true);
      getUpdateCreateButton().setText("Aktualizuj");
   }
}

Dodawanie zdarzenia actionPerformed do przycisku Nowy

W tym kroku zostanie dodany kod zdarzenia wywoływanego po kliknięciu przycisku Nowy. To zdarzenie informuje obiekt switchingDataObject o konieczności użycia obiektu danych newEmployeeRecord, ustawia flagę trybu na "new" i uruchamia metodę updateMode() dodaną w poprzednim kroku.

  1. W widoku projektowania kliknij prawym przyciskiem myszy przycisk Nowy i wybierz opcję Zdarzenia > actionPerformed. W metodzie getNewButton() zostanie wygenerowany następujący kod:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          System.out.println("actionPerformed()"); // TODO Automatycznie wygenerowany kod pośredniczący zdarzenia actionPerformed()
       }
    });
  2. Zastąp ten wygenerowany szkielet poniższym kodem:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
          getNewEmployeeRecord().refresh();
          isNewMode = true; // przełącza aplikację w tryb nowego rekordu
          updateMode(); // zmienia interfejs użytkownika odpowiednio do nowego trybu
          getLastNameField().grabFocus();
       }
    });

Ponowne wiązanie przycisku Aktualizacja

W poprzedniej lekcji przycisk Aktualizacja został zaprogramowany do korzystania z metody modifyEmployee usługi Web Service. Ta czynność jest zaimplementowana jako SwingDataServiceAction. Jedną z właściwości czynności SwingDataServiceAction jest obiekt źródłowy działający jako argument usługi. Obiekt źródłowy dla czynności modyfikacji jest obecnie ustawiony na obiekt selectedEmployeeRecord. Aby zaprogramować ten przycisk do sterowania zarówno aktualizacją, jak i dodawaniem, należy ponownie skonfigurować czynność tego przycisku w celu używania obiektu switchingDataObject jako argumentu dla usługi modifyEmployee.

  1. W widoku projektowania wybierz przycisk Aktualizacja. Zwróć uwagę na różową, kropkowaną strzałkę wskazującą, że obiekt selectedEmployeeRecord jest argumentem wywołania usługi.
  2. Kliknij zakładkę Wiązanie dla przycisku Aktualizacja.
  3. W polu Argument wybierz pozycję switchingDataObject.

    Powiązania czynności komponentu dla przycisku Aktualizacja używającego teraz obiektu switchingDataObject

  4. Kliknij przycisk OK.

    Należy teraz zauważyć, że czynność przycisku została teraz skonfigurowana do korzystania z obiektu switchingDataObject jako argumentu dla metody modifyEmployee:

    Przycisk Aktualizacja powiązany z usługą Web Service i z obiektem switchingDataObject jako argumentem

Dodawanie zdarzenia do konsolidatora przycisku Aktualizacja na potrzeby resetowania trybu

Po kliknięciu przycisku Aktualizacja i zakończeniu czynności w usłudze Web Service aplikacja powinna powrócić do swojego domyślnego trybu i zachowania. W tym celu należy dodać procedurę nasłuchiwania zdarzeń w konsolidatorze działań związanych z przyciskiem, która będzie aktualizować tryb i odświeżać tabelę po zakończeniu aktualizacji lub dodawania.

Dla przycisku Aktualizacja dodaj do metody getModifyEmployeeAction() następujący kod:
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { 
    public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {    
      if (isNewMode) {
        // wróć do używania obiektu selectedEmployeeRecord
        getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord());
        // wycofaj tryb nowego rekordu
        isNewMode = false; 
        updateMode();
      }
      // odśwież obiekt danych tabeli
      getLightEmployeeRecordRows().refresh();
    }
    public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} 
});

Punkt kontrolny lekcji

Po uruchomieniu aplikacji Firmowa książka adresowa można teraz kliknąć przycisk Nowy i dodać rekord nowego pracownika.

< Wstecz | Dalej >