2004.10_Eclipse i Java–program do obliczania sum kontrolnych_[Programowanie].pdf
(
923 KB
)
Pobierz
439034754 UNPDF
dla programistów
Eclipse i Java
– program
do obliczania sum
kontrolnych
Marek Sawerwain
dziwie przenośną, nie mamy
dużego wyboru. Obecnie
najbardziej dojrzałą platfor-
mą, właściwą dla tego typu projektu,
jest
Java
. Zapewnia ona pożądaną
przez nas cechę, czyli uruchamianie
jednego kodu binarnego na różnych
platformach sprzętowo-programowych.
Jedynym konkurencyjnym rozwiąza-
niem o podobnych możliwościach jest
Mono
, ale nie jest to produkt tak doj-
rzały, jak Java, rozwijana już od ponad
dziesięciu lat.
Od dłuższego czasu możemy korzy-
stać z darmowego środowiska dewe-
loperskiego dla Javy o nazwie
Eclipse
,
którego najnowsza wersja 3.0 została
wydana 25 czerwca 2004 roku. Możliwo-
ści tego pakietu, napisanego oczywiście
w Javie, są niemałe. Najważniejszym ich
elementem jest modularna architektura,
pozwalająca dodawać nowe funkcje do
środowiska za pomocą wtyczek (ang.
plugins
).
Po zainstalowaniu i uruchomieniu
pakietu Eclipse może on wydawać
się kolejnym darmowym edytorem
do kodu źródłowego, choć o sporych
możliwościach: podświetlanie składni,
podpowiedzi w kodzie czy dodatkowe
okno z drzewem wszystkich metod i pól
klas, nad którymi aktualnie pracujemy.
Możemy poczuć się nieco rozczarowani.
Siła Eclipse wyraża się jednak dostęp-
nymi wtyczkami, gdyż po ich zainsta-
lowaniu otrzymujemy bardzo wygodne
narzędzie RAD, w którym interfejs użyt-
kownika budujemy za pomocą myszki.
Oczywiście, nadal mamy pełną kontrolę
na kodem źródłowym interfejsu użyt-
kownika, np. gdy zmienimy tekst
wyświetlany przez etykietę w kodzie
źródłowym, to ta zmiana nastąpi rów-
nież w edytorze wizualnym.
W tym artykule chciałbym przedsta-
wić środowisko
Eclipse
, ale aby nasza
prezentacja nie była tylko teoretyczna,
napiszemy nieskomplikowaną aplika-
cję do obliczania wartości
hash
dla
danych tekstowych i plików, czyli gra-
ficzny odpowiednik programu z konsoli
o nazwie
Md5sum
.
Na płycie CD/DVD
Na płycie CD/DVD znajduje się
Eclipse i Java, kod źródłowy
tworzonego programu oraz
wszystkie listingi z artykułu.
Instalacja środowiska
Eclipse
Pakiet Eclipse nie jest jeszcze dostępny
w popularnych dystrybucjach Linuksa.
Trzeba samodzielnie ściągnąć odpo-
wiednie pakiety ze strony domowej pro-
jektu (oczywiście, na płytach CD/DVD
znajdują się wszystkie potrzebne pliki
instalacyjne). Obecnie ostatnia stabilna
wersja jest oznaczona numerem 3.0.
Najlepiej ściągnąć pakiet
Eclipse SDK
.
Zawiera on dokumentację oraz przykła-
dy, ale nie ma w nim maszyny wirtualnej
języka Java. Musimy zaopatrzyć się w nią
ściągając odpowiedni pakiet ze strony
Suna. Najlepszą wersją będzie
Java SDK
,
chociaż wersja
JRE
jest wystarczająca,
gdyż Eclipse posiada własny kompilator.
W momencie pisania tego tekstu stabilna
wersja Javy nosi numer 1.4.2_05 i właśnie
najlepiej jej używać.
W przypadku Linuksa istnieją dwie
odmiany Eclipse: dla biblioteki
Motif
(ewentualnie
Lesstif
) oraz dla biblioteki
GTK+ 2
. W tym artykule będziemy opie-
rać się na tej drugiej.
O autorze
Autor zajmuje się tworzeniem
oprogramowania dla WIN32
i Linuksa. Zainteresowania: teoria
języków programowania oraz
dobra literatura. Kontakt z auto-
rem:
autorzy@lpmagazine.org
68
październik 2004
C
hcąc napisać aplikację praw-
Eclipse i Java
dla programistów
Instalacja Javy
Pakiet instalacyjny Javy, dostarczany
przez Suna, występuje w dwóch wer-
sjach: jako pakiet RPM i pakiet BIN.
Instalację dowolnej wersji jak zwykle
wykonujemy z konta
root
.
Instalacja pakietu RPM sprowadza
się do wydania polecenia:
rpm -iv j2sdk-1_4_2_<ref_version>-
S
linux-i586.rpm
Po ściągnięciu pliku w formacie ZIP
musimy go rozpakować. Będzie nam
w tym celu potrzebny program
Unzip
.
Pobrany pakiet możemy rozpakować do
dowolnego katalogu, np.:
identyczna z głównym pakietem. Jeśli
pakiet główny Eclipse został rozpakowa-
ny w katalogu
/opt
, to instalacja VE prze-
biega przykładowo w taki sposób:
mkdir /opt ; cd /opt
unzip eclipse-SDK-3.0-linux-gtk.zip
cd /opt
unzip emf-sdo-runtime-2.0.0.zip
unzip GEF-runtime-3.0.zip
unzip VE-runtime-1.0M2.zip
Po rozpakowaniu zostanie utworzony
katalog
eclipse
, a w nim znajdziemy
gotowe środowisko pracy. Program uru-
chamiamy poprzez wydanie polecenia
eclipse.
Oczywiście, w systemie musi
być zainstalowana Java. Jak to zrobić oraz
kilka przydatnych rad zawiera ramka
Instalacja Javy
.
Środowisko Eclipse w podstawowej
wersji nie oferuje graficznego edyto-
ra interfejsu. Aby z niego skorzystać,
musimy ściągnąć odpowiednie wtyczki.
Można to zrobić na dwa sposoby.
Jeśli mamy dostęp do Internetu,
wystarczy skorzystać z funkcji aktuali-
zacji Eclipse poprzez Sieć. Wybieramy
z menu
Help/Software Updates
opcję
Find and Install
. Po krótkiej chwili (pro-
gram szuka nowych plików) wybieramy
pakiet o nazwie
VE
, czyli
Visual Editor
(ewentualnie VEP –
Visual Editor Pro-
ject
). Gdy powstawał ten tekst, wersja
stabilna była dość stara, ale można
skorzystać z tzw. stabilnego strumie-
nia wersji pakietu VE, np. o numerze
1.0M2. Wersja ta, choć ma prawo spra-
wiać kłopoty, jest znacznie bogatsza
w możliwości.
Alternatywą jest samodzielne zain-
stalowanie odpowiednich pakietów.
Pakiet VE występuje tylko w jednej wersji
wspólnej dla platform Win32 i Linux.
Istnieje również pakiet SDK, ale jest on
tylko istotny dla osób, które chciałyby
rozszerzyć możliwości VE. Do edytora
dostępne są również przykłady, które
szczerze polecam początkującym adep-
tom Javy. Jeśli nie są nam potrzebne
przykłady, to interesuje nas tylko pakiet
Visual Editor Runtime
.
Pakiet VE wymaga do poprawne-
go działania dwóch innych wtyczek
o nazwach
EMF Build
oraz
GEF Build
3.0
. Na płytach CD/DVD znajdują się
wszystkie potrzebne archiwa. Ich insta-
lacja jest bardzo prosta. Podobnie jak w
przypadku Eclipse, wystarczy je rozpako-
wać programem
Unzip
. Wszystkie archi-
wa zawierają pliki w katalogu
eclipse
, co
oznacza, że ich struktura katalogowa jest
Po uruchomieniu środowiska Eclipse,
wtyczka VE będzie już dostępna i gotowa
do pracy.
gdzie zapis
<ref_version>
oznacza nu-
mer rewizji. Obecnie dostępna jest
rewizja o numerze
05
i tę najlepiej zain-
stalować, chyba, że dostępna będzie
wersja o wyższej rewizji. Jednak, co
może dziwić, pakiet RPM i tak pier-
wotnie otrzymujemy w postaci pakietu
binarnego. Po jego ściągnięciu jeste-
śmy zmuszeni wykonać dwie dodatko-
we czynności. Należy nadać mu prawo
wykonywania:
chmod a+x j2sdk-1_4_2_<ref_version>-
S
linux-i586-rpm.bin
Plan programu
Po instalacji środowiska i dodatkowych
wtyczek poświęcimy chwilę, aby zapla-
nować nasze dalsze działania. Ogólny
schemat naszego programu do wyzna-
czania odcisków prezentuje Rysunek 1.
W naszym programie istnieją tylko cztery
główne zdarzenia: wybór pliku, wyzna-
czenie wartości odcisku, wyczyszczenie
pól edycyjnych oraz zakończenie pracy
programu. Obliczenie wartości odcisku
jest uzależnione od wyboru użytkowni-
ka, gdyż można nakazać obliczyć odcisk
algorytmem MD5 bądź SHA1. Ponadto,
obliczenia mogą zostać przeprowadzone
a następnie uruchomić:
./j2sdk-1_4_2_<ref_version>-linux-
S
i586-rpm.bin
Po zakończeniu działania otrzymamy go-
towy do instalacji pakiet RPM.
Drugi sposób instalacji, czyli insta-
lacja z pakietu binarnego, jest przezna-
czona dla bardziej zaawansowanych
użytkowników. Podobnie jak poprzednio,
musimy nadać prawo wykonywania
pliku:
chmod a+x j2sdk-1_4_2_<ref_version>-
S
linux-i586.bin
Czym są odciski
(wartości hash)?
Stosuje się kilka określeń dla tego typu
wartości. Mówimy o odciskach plików,
wartościach
hash
, ale także o warto-
ściach funkcji skrótu bądź o sumie, np.
suma MD5. Istnieje szereg algorytmów
do wyznaczania odcisków. Algorytmy te
reprezentują tzw. funkcje jednokierun-
kowe (ang.
one-way functions
), gdyż
na podstawie otrzymanej wartości nie
można odtworzyć danych, z których
został wygenerowany odcisk. Odcisk
jest prawie niepowtarzalny. Wystar-
czy zmienić jeden bajt danych, aby
otrzymać inną wartość skrótu. Istnieje
pewne prawdopodobieństwo (zniko-
me, ale jednak), że dla dwóch różnych
zestawów danych otrzymamy iden-
tyczne wartości
hash
. Mimo tej uwagi,
algorytmy tego typu znakomicie nadają
się do weryikacji, czy plik, ściągnięty
przez nas z Internetu, jest poprawny.
Najpopularniejszymi algorytmami są
użyte w artykule MD5 i SHA1, ale ist-
nieje wiele innych. Dobrym przykładem
jest popularny klient sieci P2P
eDonkey
.
“Osiołek” używa modyikacji algorytmu
MD4 (starsza odmiana aktualnie stoso-
wanego MD5).
Plik uruchamiamy i odpowiadamy na
kilka pytań. Jednym z nich będzie pyta-
nie o katalog docelowy – podajemy np.
/opt
. W katalogu docelowym zostanie
utworzony podkatalog o nazwie zależ-
nej od wersji, którą instalujemy. Gdy
będzie to wersja 1.4.2_05, to katalog
ten będzie nosił nazwę:
j2sdk1.4.2_05
.
Tak zainstalowana Java nie jest dla
nas zbyt przydatna, ponieważ za
każdym razem należy podawać pełną
ścieżkę do plików
java
,
javac
oraz
pozostałych. Rozwiązaniem jest dopi-
sanie dodatkowej ścieżkę do zmiennej
PATH
. Najlepiej zrobić to w pliku
/etc/
bashrc
:
export PATH=$PATH:/opt/j2skd1.4.2_05/bin
www.lpmagazine.org
69
dla programistów
�����
że pozwala szybko zbudować interfejs
– stosowanie menedżerów wyglądu
wymaga czasem wzajemnego osadza-
nia elementów interfejsu, co oznacza
konieczność dokładniejszego jego
zaplanowania. Mówiąc krótko, trzeba się
zastanowić nad tym, co chcemy otrzy-
mać. Podstawową wadą usunięcia mene-
dżera wyglądu jest fakt, że komponenty
przy zmianie wymiaru okna nie będą się
samoczynnie centrować.
Na Rysunku 4 widać dwa okna.
Oprócz podstawowego okna naszej
aplikacji, będziemy również stosować
okno wyboru pliku. Dodanie tego
okna wymaga dopisania definicji nowej
zmiennej na początku ciała klasy:
�����������
�������������
����������
�������������
������������
�����
�
���
�
��������
�����������������
����������
���
������
�
����
������������
������������������
�
����������
����
Rysunek 1.
Schemat programu
private javax.swing.JPanel jContentPane
S
= null;
dla danych tekstowych bądź dla danych
z pliku. Jak widać, struktura programu
nie jest skomplikowana. Po tej krótkiej
chwili refleksji zaczynamy tworzyć nasz
program.
trzy główne systemy GUI: AWT, Swing
oraz SWT. Pod względem wydajności
najlepszy jest SWT, ale my skorzysta-
my ze Swing, który stał się standar-
dem wśród aplikacji Javy. Tym samym,
jako obiekt bazowy używamy ramki
(
Frame
). Zwróćmy uwagę, że przy
wybieraniu innych typów zmienia się
wartość pola
superclass
. W naszej apli-
kacji w tym polu edycyjnym powinna
znajdować się następująca wartość:
javax.swing.Frame
.
Wpisanie tej linijki kodu spowoduje, że
Eclipse, oprócz projektowanego przez
nas okna, będzie wyświetlał także okno
wyboru pliku. Nie jest to zbyt duża wada
i można przyzwyczaić się do takiego
rozwiązania.
Pozostaje nam teraz ustawienie
wszystkich komponentów na formatce.
Dodanie nowego komponentu powo-
duje generowanie nowej funkcji, której
zadaniem jest utworzenie kontrolki.
Pamiętajmy o nazwaniu poszczególnych
widgetów, przy czym nie ustalamy
własności
name
, ale
field name
. W ten
sposób zmienne reprezentujące kompo-
nenty będą posiadały znaczące nazwy,
co ma zasadnicze znaczenie – nasz kod
będzie czytelny dla każdego innego pro-
gramisty.
Tworzenie projektu i klasy
głównej
Pracę nad programem rozpoczynamy
od utworzenia projektu. Z menu
File
wybieramy pozycję
New
, a z listy, która
się nam ukaże, opcję
Project
. Otrzymu-
jemy okno, w którym zebrano wszystkie
dostępne typy projektów. Nas interesuje
Java Project
. Po wybraniu projektu
naciskamy przycisk
Next
. Ukaże się
nam okno podobne do tego z Rysun-
ku 2. Uzupełniamy tylko jedno pole,
oznaczone jako
Project Name
, w które
wpisujemy nazwę naszego projektu, np.
HashCalc
.
Po utworzeniu projektu (wystar-
czy wcisnąć przycisk
Finish
) należy
utworzyć klasę główną, reprezentującą
podstawowe okno naszej aplikacji.
Ponownie z menu
File
wybieramy opcję
New
, lecz na liście, która się nam ukaże,
wskazujemy
Visual Class
. Jeśli nie ma
takiej możliwości, oznacza to, że nie
mamy zainstalowanej wtyczki VE. Po
wybraniu
Visual Class
zobaczymy okno
podobne do tego z Rysunku 3. Pierwszą
rzeczą, którą należy zrobić, to nazwać
okno (pole
Name
). Klasę nazywamy
tak jak projekt:
HashCalc
. Następnie
z listy
Style
wybieramy klasę bazową
naszego okna. Mamy do dyspozycji
Interfejs użytkownika
Po utworzeniu projektu i szkieletu
klasy rozpoczynamy tworzenie inter-
fejsu. Korzystamy z kontrolek
Swing
,
choć możemy wykorzystywać również
AWT. System Swing, podobnie jak inne
systemy GUI w Uniksach, dostarcza
specjalnych obiektów, dbających o
równomierne rozłożenie komponentów.
Jeśli z pewnych powodów nie lubimy
stosować menedżerów wyglądu i zależy
nam na samodzielnym zarządzaniu
widgetami, to należy usunąć ten mecha-
nizm. Wybieramy widok projektowane-
go okna, klikamy gdzieś na jego środku
i przechodzimy do okna własności (ang.
properties
). Odszukujemy własność
Layout
i z listy wyboru wybieramy war-
tość
null
.
W ten sposób pozbyliśmy się mene-
dżera wyglądu. Teraz każdy komponent
przez nas położony możemy dowol-
nie przemieszczać oraz zmieniać jego
wymiary. Takie rozwiązanie ma tę zaletę,
Poprawki w kodzie
interfejsu
Gdy interfejs naszej aplikacji jest już
zaprojektowany, to musimy jeszcze
wprowadzić małe poprawki, związa-
ne z widgetem
JComboBox
. Wybieramy
w nim, czy wartość odcisku ma być
wyznaczona dla pliku, czy dla danych
tekstowych. W kodzie źródłowym
zmienna tego komponentu nosi nazwę
TypeComboBox.
Pełen kod tej metody
jest bardzo krótki, a przedstawia
go Listing 1. Względem oryginalnej
metody, wygenerowanej przez śro-
dowisko Eclipse, różni się ona tylko
następującą linią kodu:
TypeComboBox = new JComboBox(type_items);
70
październik 2004
Eclipse i Java
dla programistów
DataTextField.setText("");
MD5TextField.setText("");
SHA1TextField.setText("");
int state;
state = getJfc().showOpenDialog(this);
if (state == jFileChooser.
S
APPROVE_OPTION) {
DataTextField.setText(jFileChooser.
S
getSelectedFile().getAbsolutePath());
}
Cała metoda tworząca przycisk
CleanBtn
została przedstawiona na Listingu 2. Czy-
telników, którzy po raz pierwszy widzą
Javę, zapewne dziwi deklaracja
action-
Performed
. Tworzymy w ten sposób
potrzebny obiekt i od razy przeciążamy
odpowiednią metodę, choć lepiej powie-
dzieć, że definiujemy metodę anonimo-
wą.
Funkcja
getJfc
zwraca obiekt okna,
więc mogliśmy wywołać metodę
show-
OpenDialog
, a także tworzy okno, jeśli
potrzeba. Gdy okno zostanie zamknię-
te, to wartość wynikową metody
show-
OpenDialog
umieszczamy w zmiennej.
Następnie sprawdzamy, czy jest ona
równa wartości
jFileChooser.APPRO-
VE_OPTION
. Jeśli tak, to oznacza to, że
użytkownik wskazał plik oraz zatwier-
dził ten fakt przyciskiem
OK
w oknie
wyboru pliku. Pozostało nam tylko
przenieść pełną ścieżkę wybranego
pliku do komponentu
DataTextField
.
Zajmijmy się teraz funkcją
getJfc
.
Podczas budowy interfejsu każdy kom-
ponent położony na formatce powoduje
utworzenie funkcji z przedrostkiem
get
.
Ponieważ samodzielnie zdefiniowaliśmy
zmienną okna wyboru, to aby utrzymać
tę samą notację, dla porządku powinni-
śmy utworzyć odpowiednią funkcję
get
.
Sposób działania tej funkcji jest nastę-
pujący: jeśli wartość zmiennej
jFileCho-
oser
wynosi
null
, to należy utworzyć
nowy obiekt; to dokładnie robi każda
z funkcji z przedrostkiem
get
. Pełną treść
funkcji
getJfc
zawiera Listing 3. Dodat-
Rysunek 2.
Tworzenie nowego projektu
W przypadku przycisku
Koniec
(zmienna
EndBtn
) chcemy doprowadzić
do zakończenia pracy programu. Wystar-
czy wywołać standardową metodę
exit
,
co sprowadza się do jednej linii kodu
umieszczonej w treści
actionPerformed
:
Oryginalna metoda nie przekazuje żad-
nych danych w argumencie konstruk-
tora
JComboBox
. W naszej podaliśmy
tablicę elementów, którą ma zawierać
nasz
ComboBox
. Definicję tej tablicy
(podobnie jak okna wyboru plików)
umieszczamy na początku ciała klasy
HashCalc
:
System.exit(0);
Wybór pliku
W naszej aplikacji posługujemy się
dodatkowym oknem, przeznaczonym do
wyboru pliku. Okno to zdefiniowaliśmy
już wcześniej, dopisując odpowiednią
deklarację na początku ciała klasy
Hash-
Calc
.
Wywołanie okna nastąpi po wybra-
niu przycisku z trzema kropkami, który
znajduje się obok pola edycyjnego
Data-
TextField
. Obsługa zdarzenia dla tego
przycisku to wywołanie innej metody o
nazwie
SetFileName
. Ta metoda nie jest
zbyt długa:
private String[] type_items={"dane
S
tekstowe","dane z pliku"};
Przyciski
„Czyść” i „Koniec”
Po trywialnych zmianach w kodzie
interfejsu możemy przystąpić do
implementacji zachowań naszych
przycisków. Na początek zajmijmy się
przyciskiem „Czyść” (w kodzie nosi on
nazwę
CleanBtn
). Zgodnie z naszymi
założeniami, ma on czyścić zawartość
trzech pól edycyjnych (pola danych
bądź nazwy pliku oraz dwóch pól,
w których są umieszczane wartości
hash
).
Aby dodać nową obsługę zdarzenia,
wystarczy w oknie
JavaBeans
wskazać
potrzebny komponent i nacisnąć lewy
przycisk myszy. Pokaże się niewielkie
menu, w którym wybieramy podmenu
Events
i z następnej listy opcję
action-
Performed
. Zostaniemy przeniesieni
do edytora, a kursor zostanie umiesz-
czony w treści wygenerowanej metody.
Powinna się tam znajdować jedna
linijka kodu, wyświetlająca komunikat
tekstowy. Ponieważ przycisk ma czyścić
pola edycyjne, to wystarczą następujące
trzy linijki wstawione zamiast oryginal-
nej treści:
Rysunek 3.
Tworzenie klasy reprezentującej okno główne aplikacji
www.lpmagazine.org
71
dla programistów
obsługujący tę sytuację przedstawia się
następująco:
if(TypeComboBox.getSelectedIndex()==0) {
if(doMD5Calc) CalcMD5HashFromString();
if(doSHA1Calc) CalcSHA1HashFromString();
}
W drugim przypadku otrzymujemy
jedynkę. Tym razem będziemy wyzna-
czać wartość
hash
dla danych zawartych
w pliku. Zmienna
DataTextField
zawiera
pełną ścieżkę pliku, który został wybrany
przez użytkownika:
if(TypeComboBox.getSelectedIndex()==1) {
if(doMD5Calc) CalcMD5HashFromFile();
if(doSHA1Calc) CalcSHA1HashFromFile();
}
Rysunek 4.
Projektowanie okna programu HashCalc
Wyznaczanie wartości
hash dla danych
tekstowych
W zależności od wyboru użytkownika,
wartość odcisku może zostać wyznaczo-
na dla pliku bądź dla ciągu znaków.
Wywołujemy dwie różne funkcje dla tych
przypadków. Zajmijmy się funkcją obli-
czającą skrót MD5 dla ciągu tekstowe-
go. Jej nazwa to
CalcMD5HashFromString
,
a treść znajduje się na Listingu 4.
Znajdujemy się w bardzo dobrej sytuacji,
ponieważ nie musimy samodzielnie zajmo-
wać się implementacją algorytmu MD5.
Biblioteka standardowa Javy zawiera odpo-
wiednie klasy. Na początek deklarujemy
zmienną reprezentującą obiekt liczący odcisk:
kowo, wyłączamy możliwość zaznacze-
nia więcej niż jednego pliku.
własność zaprzeczenia. Jeśli od początku
działania programu odpowiedni przy-
cisk wyboru jest zaznaczony, a zmienna
posiada wartość logiczną
true
, to gdy
użytkownik kliknie na przycisku, spo-
woduje jego odznaczenie i wykonanie
operacji zaprzeczenia – zmianę wartości
zmiennej z
true
na
false
. Dokładnie o to
nam chodziło – ponowne kliknięcie na
przycisku spowoduje jego zaznaczenie
i zmianę wartość logicznej z fałszu na
prawdę.
Teraz możemy oprogramować obsłu-
gę przycisku
Oblicz hash
(zmienna o
nazwie
HashCalcBtn
). Na początek spraw-
dzamy, czy pole
DataTextField
zawiera
jakieś dane:
Wybór algorytmów,
czyli przyciski wyboru
md5 i sha1
Nasz program pozwala na wybór algoryt-
mów, dla których ma zostać wyznaczona
wartość
hash
. Wybór algorytmu odbywa
się za pomocą widgetów
checkbox
.
Implementację rozpoczynamy od dekla-
racji dwóch zmiennych:
private boolean doMD5Calc = true;
private boolean doSHA1Calc = true;
MessageDigest md=null;
Wartością domyślną jest
true
, co ozna-
cza, że po uruchomieniu programu
wyznaczanie odcisku ma następować
dla obydwu algorytmów (wartości tych
zmiennych są sprawdzane w obsłudze
przycisku
Oblicz hash
). Z tego powodu
zwracamy uwagę podczas projektowania
interfejsu, aby domyślnie obydwa przyci-
ski wyboru (o nazwach
MD5CheckBox
oraz
SHA1CheckBox
) były zaznaczone.
Użytkownik może dowolnie wybie-
rać pomiędzy tymi dwoma algorytma-
mi. Aby to umożliwić, należy utworzyć
obsługę zdarzenia
itemStateChanged
dla
przycisków wyboru. Kod, który należy
podać, to jedna linia programu, np.
dla algorytmu MD5:
doMD5Calc=!do-
MD5Calc;
.
Ponieważ zmienna
doMD5Calc
jest
typu logicznego, to wykorzystujemy tutaj
if(DataTextField.getText().
S
compareTo("")==0) return;
W drugim kroku deklarujemy tablicę
b
, w której znajduje się ciąg tekstowy,
na podstawie którego wyznaczymy
odcisk. Wykorzystamy metodę
getBy-
tes
, która zmieni typ
String
na ciąg
bajów:
Jeśli powyższy test powiedzie się, oznacza
to, że komponent
DataTextField
jest pusty
i nie przeprowadzamy żadnych obliczeń.
Następnie sprawdzamy, jaka wartość
została wybrana w kontrolce
TypeCombo-
Box
. Wykorzystujemy metodę
getSelec-
tedIndex
. Wartości zwracane tą metodą
odpowiadają dokładnie tablicy elemen-
tów, którą wcześniej zadeklarowaliśmy.
W pierwszym przypadku otrzymuje-
my zero. Jest to pierwszy element tablicy,
na którym znajduje się wartość
dane
tekstowe
. Wybranie tej wartości oznacza
obliczanie wartości
hash
z ciągu znaków
podanych przez użytkownika. Kod
Listing 1.
Metoda tworząca komponent
TypeComboBox
private
JComboBox
getTypeComboBox
()
{
if
(
TypeComboBox
==
null
)
{
TypeComboBox
=
new
TypeComboBox
.
setBounds
(
13
,
S
56
,
125
,
21
)
;
TypeComboBox
.
setSelectedIndex
(
0
)
;
}
return
TypeComboBox
;
}
72
październik 2004
S
JcomboBox
(
type_items
)
;
Plik z chomika:
SOLARIX33
Inne pliki z tego folderu:
2006.01_Koder plików w formacie OGG_[Programowanie].pdf
(722 KB)
2007.06_Piękno fraktali_[Programowanie].pdf
(1778 KB)
2008.11_GanttProject_[Programowanie].pdf
(1014 KB)
2007.04_USB Device Explorer_[Programowanie].pdf
(1134 KB)
2006.09_QT, PyQT – szybkie tworzenie baz danych_[Programowanie].pdf
(1319 KB)
Inne foldery tego chomika:
Administracja
Aktualnosci
Audio
Bazy Danych
Bezpieczenstwo
Zgłoś jeśli
naruszono regulamin