Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
waluty_22sierpnia
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
waluty_22sierpnia
Commits
9b8cc34b
Commit
9b8cc34b
authored
Aug 22, 2021
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Przykłady JSON
parent
1e5242ab
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
896 additions
and
1 deletions
+896
-1
pom.xml
pom.xml
+13
-1
PogodaDlaMiasta.java
src/test/java/pogoda_json/PogodaDlaMiasta.java
+76
-0
ObslugaNBP.java
src/test/java/waluty/wersja_json/ObslugaNBP.java
+60
-0
ProbaPobraniaJsona.java
src/test/java/waluty/wersja_json/ProbaPobraniaJsona.java
+55
-0
ProbaPobraniaJsona2.java
src/test/java/waluty/wersja_json/ProbaPobraniaJsona2.java
+55
-0
PrzelicznikWalutKonsola.java
...test/java/waluty/wersja_json/PrzelicznikWalutKonsola.java
+42
-0
PrzelicznikWalutOkno.java
src/test/java/waluty/wersja_json/PrzelicznikWalutOkno.java
+437
-0
Tabela.java
src/test/java/waluty/wersja_json/Tabela.java
+82
-0
Waluta.java
src/test/java/waluty/wersja_json/Waluta.java
+60
-0
WypiszWszystkieWaluty.java
src/test/java/waluty/wersja_json/WypiszWszystkieWaluty.java
+16
-0
No files found.
pom.xml
View file @
9b8cc34b
...
@@ -16,9 +16,20 @@
...
@@ -16,9 +16,20 @@
<dependency>
<dependency>
<groupId>
org.junit.jupiter
</groupId>
<groupId>
org.junit.jupiter
</groupId>
<artifactId>
junit-jupiter-api
</artifactId>
<artifactId>
junit-jupiter-api
</artifactId>
<version>
5.7.
1
</version>
<version>
5.7.
2
</version>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
javax.json
</groupId>
<artifactId>
javax.json-api
</artifactId>
<version>
1.1.4
</version>
</dependency>
<dependency>
<groupId>
org.glassfish
</groupId>
<artifactId>
javax.json
</artifactId>
<version>
1.1.4
</version>
<scope>
runtime
</scope>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
src/test/java/pogoda_json/PogodaDlaMiasta.java
0 → 100644
View file @
9b8cc34b
package
pogoda_json
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.URL
;
import
java.util.Scanner
;
import
javax.json.Json
;
import
javax.json.JsonArray
;
import
javax.json.JsonObject
;
import
javax.json.JsonReader
;
import
javax.json.JsonValue
;
public
class
PogodaDlaMiasta
{
public
static
void
main
(
String
[]
args
)
{
try
{
@SuppressWarnings
(
"resource"
)
Scanner
sc
=
new
Scanner
(
System
.
in
);
System
.
out
.
print
(
"Podaj nazwę miasta: "
);
String
miasto
=
sc
.
nextLine
();
int
idLokalizacji
=
dajIdLokalizacji
(
miasto
);
System
.
out
.
println
(
"Znalezione id lokalizacji: "
+
idLokalizacji
);
wypiszPogodeDlaLokalizacji
(
idLokalizacji
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
private
static
JsonArray
pobierzJSONArray
(
String
adres
)
throws
IOException
{
URL
url
=
new
URL
(
adres
);
try
(
InputStream
in
=
url
.
openStream
())
{
JsonReader
reader
=
Json
.
createReader
(
in
);
return
reader
.
readArray
();
}
}
private
static
JsonObject
pobierzJSONObject
(
String
adres
)
throws
IOException
{
URL
url
=
new
URL
(
adres
);
try
(
InputStream
in
=
url
.
openStream
())
{
JsonReader
reader
=
Json
.
createReader
(
in
);
return
reader
.
readObject
();
}
}
private
static
int
dajIdLokalizacji
(
String
miasto
)
throws
IOException
{
String
adres
=
"https://www.metaweather.com/api/location/search/?query="
+
miasto
;
JsonArray
dane
=
pobierzJSONArray
(
adres
);
JsonObject
object
=
dane
.
getJsonObject
(
0
);
return
object
.
getInt
(
"woeid"
);
}
private
static
void
wypiszPogodeDlaLokalizacji
(
int
idLokalizacji
)
throws
IOException
{
String
adres
=
"https://www.metaweather.com/api/location/"
+
idLokalizacji
;
JsonObject
jsonObject
=
pobierzJSONObject
(
adres
);
JsonArray
jsonArray
=
jsonObject
.
getJsonArray
(
"consolidated_weather"
);
for
(
JsonValue
jsonValue
:
jsonArray
)
{
if
(
jsonValue
instanceof
JsonObject
)
{
JsonObject
prognoza
=
(
JsonObject
)
jsonValue
;
System
.
out
.
println
(
"Data: "
+
prognoza
.
getString
(
"applicable_date"
));
System
.
out
.
println
(
"Ogólny stan: "
+
prognoza
.
getString
(
"weather_state_name"
));
System
.
out
.
println
(
"Temperatura: "
+
prognoza
.
getJsonNumber
(
"the_temp"
).
doubleValue
());
}
System
.
out
.
println
();
}
}
}
src/test/java/waluty/wersja_json/ObslugaNBP.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.math.BigDecimal
;
import
java.net.URL
;
import
java.time.LocalDate
;
import
javax.json.Json
;
import
javax.json.JsonArray
;
import
javax.json.JsonObject
;
import
javax.json.JsonReader
;
import
javax.json.JsonValue
;
public
class
ObslugaNBP
{
private
static
final
String
ADRES
=
"http://api.nbp.pl/api/exchangerates/tables"
;
/**
* Pobiera tabelę z bieżącymi kursami walut. Zwraca null w przypadku błędów.
*/
public
static
Tabela
pobierzBiezaceKursy
()
{
return
wczytajZAdresu
(
ADRES
+
"/A?format=json"
);
}
public
static
Tabela
pobierzKursyHistoryczne
(
String
data
)
{
return
wczytajZAdresu
(
ADRES
+
"/A/"
+
data
+
"?format=json"
);
}
private
static
Tabela
wczytajZAdresu
(
String
adres
)
{
try
{
URL
url
=
new
URL
(
adres
);
try
(
InputStream
in
=
url
.
openStream
())
{
JsonReader
reader
=
Json
.
createReader
(
in
);
JsonArray
array
=
reader
.
readArray
();
JsonObject
jo_tabela
=
array
.
getJsonObject
(
0
);
String
nazwaTabeli
=
jo_tabela
.
getString
(
"table"
);
String
numerTabeli
=
jo_tabela
.
getString
(
"no"
);
LocalDate
data
=
LocalDate
.
parse
(
jo_tabela
.
getString
(
"effectiveDate"
));
Tabela
tabela
=
new
Tabela
(
nazwaTabeli
,
numerTabeli
,
data
);
JsonArray
rates
=
jo_tabela
.
getJsonArray
(
"rates"
);
for
(
JsonValue
jsonValue
:
rates
)
{
JsonObject
walutaJSON
=
(
JsonObject
)
jsonValue
;
String
kod
=
walutaJSON
.
getString
(
"code"
);
String
nazwa
=
walutaJSON
.
getString
(
"currency"
);
BigDecimal
kurs
=
walutaJSON
.
getJsonNumber
(
"mid"
).
bigDecimalValue
();
Waluta
waluta
=
new
Waluta
(
kod
,
nazwa
,
kurs
);
tabela
.
dodaj
(
waluta
);
}
return
tabela
;
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
}
src/test/java/waluty/wersja_json/ProbaPobraniaJsona.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.math.BigDecimal
;
import
java.net.URL
;
import
javax.json.Json
;
import
javax.json.JsonArray
;
import
javax.json.JsonObject
;
import
javax.json.JsonReader
;
import
javax.json.JsonValue
;
public
class
ProbaPobraniaJsona
{
private
static
final
String
ADRES
=
"http://api.nbp.pl/api/exchangerates/tables"
;
public
static
void
main
(
String
[]
args
)
{
try
{
String
adres
=
ADRES
+
"/A?format=json"
;
URL
url
=
new
URL
(
adres
);
try
(
InputStream
in
=
url
.
openStream
())
{
System
.
out
.
println
(
"zaczynam parsować..."
);
JsonReader
reader
=
Json
.
createReader
(
in
);
JsonArray
dane
=
reader
.
readArray
();
//System.out.println(dane);
JsonObject
tabela
=
dane
.
getJsonObject
(
0
);
// System.out.println(tabela);
String
numerTabeli
=
tabela
.
getString
(
"no"
);
String
data
=
tabela
.
getString
(
"effectiveDate"
);
System
.
out
.
println
(
"Tabela numer "
+
numerTabeli
+
" z dnia "
+
data
);
JsonArray
waluty
=
tabela
.
getJsonArray
(
"rates"
);
for
(
JsonValue
jsonValue
:
waluty
)
{
// jeśli element tablicy jest JSON-owym obiektem (a powinien być), to rzutujemy i odczytujemy pola
if
(
jsonValue
instanceof
JsonObject
)
{
JsonObject
walutaJSON
=
(
JsonObject
)
jsonValue
;
String
kod
=
walutaJSON
.
getString
(
"code"
);
String
nazwa
=
walutaJSON
.
getString
(
"currency"
);
BigDecimal
kurs
=
walutaJSON
.
getJsonNumber
(
"mid"
).
bigDecimalValue
();
Waluta
waluta
=
new
Waluta
(
kod
,
nazwa
,
kurs
);
System
.
out
.
println
(
waluta
);
}
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
src/test/java/waluty/wersja_json/ProbaPobraniaJsona2.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.math.BigDecimal
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
javax.json.Json
;
import
javax.json.JsonArray
;
import
javax.json.JsonObject
;
import
javax.json.JsonReader
;
import
javax.json.JsonValue
;
public
class
ProbaPobraniaJsona2
{
private
static
final
String
ADRES
=
"http://api.nbp.pl/api/exchangerates/tables"
;
public
static
void
main
(
String
[]
args
)
{
try
{
JsonArray
dane
=
pobierzJSON
(
ADRES
+
"/A?format=json"
);
JsonObject
tabela
=
dane
.
getJsonObject
(
0
);
String
numerTabeli
=
tabela
.
getString
(
"no"
);
String
data
=
tabela
.
getString
(
"effectiveDate"
);
System
.
out
.
println
(
"Tabela numer "
+
numerTabeli
+
" z dnia "
+
data
);
JsonArray
waluty
=
tabela
.
getJsonArray
(
"rates"
);
for
(
JsonValue
jsonValue
:
waluty
)
{
// jeśli element tablicy jest JSON-owym obiektem (a powinien być), to rzutujemy i odczytujemy pola
if
(
jsonValue
instanceof
JsonObject
)
{
JsonObject
walutaJSON
=
(
JsonObject
)
jsonValue
;
String
kod
=
walutaJSON
.
getString
(
"code"
);
String
nazwa
=
walutaJSON
.
getString
(
"currency"
);
BigDecimal
kurs
=
walutaJSON
.
getJsonNumber
(
"mid"
).
bigDecimalValue
();
Waluta
waluta
=
new
Waluta
(
kod
,
nazwa
,
kurs
);
System
.
out
.
println
(
waluta
);
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
private
static
JsonArray
pobierzJSON
(
String
adres
)
throws
IOException
{
URL
url
=
new
URL
(
adres
);
try
(
InputStream
in
=
url
.
openStream
())
{
JsonReader
reader
=
Json
.
createReader
(
in
);
return
reader
.
readArray
();
}
}
}
src/test/java/waluty/wersja_json/PrzelicznikWalutKonsola.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.math.BigDecimal
;
import
java.util.Scanner
;
public
class
PrzelicznikWalutKonsola
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Pobieram aktualne kursy..."
);
Tabela
tabela
=
ObslugaNBP
.
pobierzBiezaceKursy
();
System
.
out
.
println
(
tabela
);
try
(
Scanner
sc
=
new
Scanner
(
System
.
in
))
{
while
(
true
)
{
System
.
out
.
println
(
"\nPodaj kod waluty"
);
String
kod
=
sc
.
nextLine
().
trim
().
toUpperCase
();
if
(
kod
==
null
||
kod
.
isEmpty
())
break
;
Waluta
waluta
=
tabela
.
znajdz
(
kod
);
if
(
waluta
==
null
)
{
System
.
out
.
println
(
"Nie ma takiej waluty."
);
continue
;
}
System
.
out
.
println
(
"Wybrana waluta: "
+
waluta
.
getNazwa
());
System
.
out
.
println
(
"Podaj kwotę"
);
if
(!
sc
.
hasNextBigDecimal
())
{
System
.
out
.
println
(
"Nieprawidłowa kwota."
);
continue
;
}
BigDecimal
kwota
=
sc
.
nextBigDecimal
();
sc
.
nextLine
();
System
.
out
.
println
(
kwota
+
" "
+
kod
+
" = "
+
waluta
.
przeliczNaZlote
(
kwota
)
+
" PLN"
);
System
.
out
.
println
(
kwota
+
" PLN "
+
" = "
+
waluta
.
przeliczNaWalute
(
kwota
)
+
" "
+
kod
);
}
}
}
}
src/test/java/waluty/wersja_json/PrzelicznikWalutOkno.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.awt.Color
;
import
java.awt.EventQueue
;
import
java.awt.Font
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.math.BigDecimal
;
import
java.time.LocalDate
;
import
javax.swing.ButtonGroup
;
import
javax.swing.DefaultComboBoxModel
;
import
javax.swing.GroupLayout
;
import
javax.swing.GroupLayout.Alignment
;
import
javax.swing.JButton
;
import
javax.swing.JComboBox
;
import
javax.swing.JFrame
;
import
javax.swing.JLabel
;
import
javax.swing.JPanel
;
import
javax.swing.JRadioButton
;
import
javax.swing.JTextField
;
import
javax.swing.LayoutStyle.ComponentPlacement
;
import
javax.swing.SwingConstants
;
import
javax.swing.SwingUtilities
;
import
javax.swing.SwingWorker
;
public
class
PrzelicznikWalutOkno
{
private
static
final
Font
FONT_LABEL
=
new
Font
(
"Times New Roman"
,
Font
.
PLAIN
,
24
);
private
static
final
Font
FONT_WARTOSC
=
new
Font
(
"Dialog"
,
Font
.
BOLD
,
24
);
private
static
final
Font
FONT_TXT
=
new
Font
(
"Dialog"
,
Font
.
BOLD
,
32
);
private
static
final
Font
FONT_WYNIK
=
new
Font
(
"Dialog"
,
Font
.
BOLD
,
32
);
private
static
final
Font
FONT_BUTTON
=
new
Font
(
"Dialog"
,
Font
.
BOLD
,
28
);
private
Tabela
tabela
=
null
;
private
JFrame
frmPrzelicznikWalut
;
private
JTextField
txtKwota
;
private
JComboBox
<
String
>
comboBox_Waluta
;
private
JLabel
lbl_KodWaluty
;
private
JLabel
lbl_NazwaWaluty
;
private
JLabel
lbl_KursWaluty
;
private
JRadioButton
rdbtnWalutaNaZlote
;
private
JRadioButton
rdbtnZloteNaWalute
;
private
JButton
btnPrzelicz
;
private
JLabel
lblPrawdziwyWynik
;
private
final
ButtonGroup
buttonGroup
=
new
ButtonGroup
();
private
JPanel
panel_1
;
private
JLabel
lblTabela
;
private
JLabel
lbl_NumerTabeli
;
private
JLabel
lblData
;
private
JLabel
lbl_DataTabeli
;
private
JTextField
txtData
;
private
JButton
btnPobierzAktualne
;
/**
* Launch the application.
*/
public
static
void
main
(
String
[]
args
)
{
EventQueue
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
try
{
PrzelicznikWalutOkno
window
=
new
PrzelicznikWalutOkno
();
window
.
txtData
.
setText
(
LocalDate
.
now
().
toString
());
window
.
frmPrzelicznikWalut
.
setVisible
(
true
);
window
.
pobierzAktualneKursy
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
});
}
/**
* Create the application.
*/
public
PrzelicznikWalutOkno
()
{
initialize
();
}
/**
* Initialize the contents of the frame.
*/
private
void
initialize
()
{
frmPrzelicznikWalut
=
new
JFrame
();
frmPrzelicznikWalut
.
setTitle
(
"Przelicznik Walut"
);
frmPrzelicznikWalut
.
setBounds
(
100
,
100
,
480
,
701
);
frmPrzelicznikWalut
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
JLabel
lblWybierzWalut
=
new
JLabel
(
"Wybierz walutę"
);
lblWybierzWalut
.
setFont
(
FONT_LABEL
);
comboBox_Waluta
=
new
JComboBox
<>();
comboBox_Waluta
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
ev
)
{
wyswietlDaneWaluty
();
}
});
comboBox_Waluta
.
setModel
(
new
DefaultComboBoxModel
<>(
new
String
[]
{
"--"
}));
comboBox_Waluta
.
setFont
(
FONT_WARTOSC
);
JPanel
panel
=
new
JPanel
();
txtKwota
=
new
JTextField
();
txtKwota
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
ev
)
{
przelicz
();
}
});
txtKwota
.
setText
(
"100"
);
txtKwota
.
setColumns
(
10
);
txtKwota
.
setFont
(
FONT_TXT
);
JLabel
lblPodajKwot
=
new
JLabel
(
"Podaj kwotę"
);
lblPodajKwot
.
setFont
(
FONT_LABEL
);
rdbtnWalutaNaZlote
=
new
JRadioButton
(
"waluta na złote"
);
rdbtnWalutaNaZlote
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
ev
)
{
przelicz
();
}
});
rdbtnWalutaNaZlote
.
setFont
(
FONT_LABEL
);
buttonGroup
.
add
(
rdbtnWalutaNaZlote
);
rdbtnZloteNaWalute
=
new
JRadioButton
(
"złote na walute"
);
rdbtnZloteNaWalute
.
setFont
(
FONT_LABEL
);
rdbtnZloteNaWalute
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
ev
)
{
przelicz
();
}
});
buttonGroup
.
add
(
rdbtnZloteNaWalute
);
btnPrzelicz
=
new
JButton
(
"Przelicz"
);
btnPrzelicz
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
ev
)
{
przelicz
();
}
});
btnPrzelicz
.
setFont
(
FONT_BUTTON
);
JLabel
lblWynik
=
new
JLabel
(
"Wynik"
);
lblWynik
.
setFont
(
FONT_LABEL
);
lblPrawdziwyWynik
=
new
JLabel
(
"0.00"
);
lblPrawdziwyWynik
.
setFont
(
FONT_WYNIK
);
lblPrawdziwyWynik
.
setForeground
(
Color
.
GRAY
);
panel_1
=
new
JPanel
();
JLabel
lblPodajDat
=
new
JLabel
(
"Podaj datę"
);
lblPodajDat
.
setFont
(
FONT_LABEL
);
txtData
=
new
JTextField
();
txtData
.
setHorizontalAlignment
(
SwingConstants
.
CENTER
);
txtData
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
PLAIN
,
20
));
txtData
.
setText
(
"data"
);
txtData
.
setColumns
(
10
);
JButton
btnZmieDat
=
new
JButton
(
"Zmień datę"
);
btnZmieDat
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
pobierzKursyDlaDaty
();
}
});
btnZmieDat
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
BOLD
,
18
));
btnPobierzAktualne
=
new
JButton
(
"Pobierz aktualne"
);
btnPobierzAktualne
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
pobierzAktualneKursy
();
}
});
btnPobierzAktualne
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
BOLD
,
18
));
GroupLayout
groupLayout
=
new
GroupLayout
(
frmPrzelicznikWalut
.
getContentPane
());
groupLayout
.
setHorizontalGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
groupLayout
.
createSequentialGroup
()
.
addContainerGap
()
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
TRAILING
)
.
addComponent
(
panel_1
,
Alignment
.
LEADING
,
GroupLayout
.
DEFAULT_SIZE
,
448
,
Short
.
MAX_VALUE
)
.
addComponent
(
btnPrzelicz
,
Alignment
.
LEADING
,
GroupLayout
.
DEFAULT_SIZE
,
448
,
Short
.
MAX_VALUE
)
.
addGroup
(
Alignment
.
LEADING
,
groupLayout
.
createSequentialGroup
()
.
addComponent
(
rdbtnWalutaNaZlote
)
.
addPreferredGap
(
ComponentPlacement
.
RELATED
,
108
,
Short
.
MAX_VALUE
)
.
addComponent
(
rdbtnZloteNaWalute
))
.
addGroup
(
Alignment
.
LEADING
,
groupLayout
.
createSequentialGroup
()
.
addComponent
(
lblPodajKwot
)
.
addPreferredGap
(
ComponentPlacement
.
RELATED
,
139
,
Short
.
MAX_VALUE
)
.
addComponent
(
txtKwota
,
GroupLayout
.
PREFERRED_SIZE
,
189
,
GroupLayout
.
PREFERRED_SIZE
))
.
addComponent
(
panel
,
Alignment
.
LEADING
,
GroupLayout
.
DEFAULT_SIZE
,
448
,
Short
.
MAX_VALUE
)
.
addComponent
(
lblWynik
,
Alignment
.
LEADING
)
.
addComponent
(
lblPrawdziwyWynik
,
Alignment
.
LEADING
)
.
addGroup
(
Alignment
.
LEADING
,
groupLayout
.
createSequentialGroup
()
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
TRAILING
,
false
)
.
addComponent
(
lblPodajDat
,
Alignment
.
LEADING
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
Short
.
MAX_VALUE
)
.
addComponent
(
lblWybierzWalut
,
Alignment
.
LEADING
,
GroupLayout
.
DEFAULT_SIZE
,
223
,
Short
.
MAX_VALUE
))
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addComponent
(
txtData
,
GroupLayout
.
DEFAULT_SIZE
,
207
,
Short
.
MAX_VALUE
)
.
addComponent
(
comboBox_Waluta
,
0
,
207
,
Short
.
MAX_VALUE
)))
.
addGroup
(
groupLayout
.
createSequentialGroup
()
.
addComponent
(
btnPobierzAktualne
,
GroupLayout
.
PREFERRED_SIZE
,
207
,
GroupLayout
.
PREFERRED_SIZE
)
.
addGap
(
34
)
.
addComponent
(
btnZmieDat
,
GroupLayout
.
DEFAULT_SIZE
,
207
,
Short
.
MAX_VALUE
)))
.
addContainerGap
())
);
groupLayout
.
setVerticalGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
TRAILING
)
.
addGroup
(
groupLayout
.
createSequentialGroup
()
.
addContainerGap
()
.
addComponent
(
panel_1
,
GroupLayout
.
PREFERRED_SIZE
,
103
,
GroupLayout
.
PREFERRED_SIZE
)
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
LEADING
,
false
)
.
addComponent
(
txtData
,
GroupLayout
.
PREFERRED_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
PREFERRED_SIZE
)
.
addComponent
(
lblPodajDat
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
Short
.
MAX_VALUE
))
.
addPreferredGap
(
ComponentPlacement
.
RELATED
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addComponent
(
btnZmieDat
)
.
addComponent
(
btnPobierzAktualne
,
GroupLayout
.
PREFERRED_SIZE
,
32
,
GroupLayout
.
PREFERRED_SIZE
))
.
addPreferredGap
(
ComponentPlacement
.
RELATED
,
17
,
Short
.
MAX_VALUE
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
comboBox_Waluta
,
GroupLayout
.
PREFERRED_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
PREFERRED_SIZE
)
.
addComponent
(
lblWybierzWalut
))
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addComponent
(
panel
,
GroupLayout
.
PREFERRED_SIZE
,
142
,
GroupLayout
.
PREFERRED_SIZE
)
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
txtKwota
,
GroupLayout
.
PREFERRED_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
PREFERRED_SIZE
)
.
addComponent
(
lblPodajKwot
))
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
groupLayout
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
rdbtnWalutaNaZlote
)
.
addComponent
(
rdbtnZloteNaWalute
))
.
addPreferredGap
(
ComponentPlacement
.
RELATED
)
.
addComponent
(
btnPrzelicz
)
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addComponent
(
lblWynik
)
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addComponent
(
lblPrawdziwyWynik
)
.
addGap
(
33
))
);
lblTabela
=
new
JLabel
(
"Tabela"
);
lblTabela
.
setFont
(
FONT_LABEL
);
lbl_NumerTabeli
=
new
JLabel
(
"?"
);
lbl_NumerTabeli
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
BOLD
,
24
));
lblData
=
new
JLabel
(
"Data:"
);
lblData
.
setFont
(
FONT_LABEL
);
lbl_DataTabeli
=
new
JLabel
(
"?"
);
lbl_DataTabeli
.
setFont
(
new
Font
(
"Dialog"
,
Font
.
BOLD
,
24
));
GroupLayout
gl_panel_1
=
new
GroupLayout
(
panel_1
);
gl_panel_1
.
setHorizontalGroup
(
gl_panel_1
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
gl_panel_1
.
createSequentialGroup
()
.
addContainerGap
()
.
addGroup
(
gl_panel_1
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
gl_panel_1
.
createSequentialGroup
()
.
addComponent
(
lblTabela
,
GroupLayout
.
PREFERRED_SIZE
,
95
,
GroupLayout
.
PREFERRED_SIZE
)
.
addGap
(
18
)
.
addComponent
(
lbl_NumerTabeli
,
GroupLayout
.
PREFERRED_SIZE
,
311
,
GroupLayout
.
PREFERRED_SIZE
))
.
addGroup
(
gl_panel_1
.
createSequentialGroup
()
.
addComponent
(
lblData
,
GroupLayout
.
PREFERRED_SIZE
,
95
,
GroupLayout
.
PREFERRED_SIZE
)
.
addGap
(
18
)
.
addComponent
(
lbl_DataTabeli
,
GroupLayout
.
PREFERRED_SIZE
,
311
,
GroupLayout
.
PREFERRED_SIZE
)))
.
addContainerGap
(
GroupLayout
.
DEFAULT_SIZE
,
Short
.
MAX_VALUE
))
);
gl_panel_1
.
setVerticalGroup
(
gl_panel_1
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
gl_panel_1
.
createSequentialGroup
()
.
addContainerGap
()
.
addGroup
(
gl_panel_1
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addComponent
(
lblTabela
,
GroupLayout
.
PREFERRED_SIZE
,
29
,
GroupLayout
.
PREFERRED_SIZE
)
.
addComponent
(
lbl_NumerTabeli
,
GroupLayout
.
PREFERRED_SIZE
,
29
,
GroupLayout
.
PREFERRED_SIZE
))
.
addGap
(
12
)
.
addGroup
(
gl_panel_1
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addComponent
(
lblData
,
GroupLayout
.
PREFERRED_SIZE
,
29
,
GroupLayout
.
PREFERRED_SIZE
)
.
addComponent
(
lbl_DataTabeli
,
GroupLayout
.
PREFERRED_SIZE
,
29
,
GroupLayout
.
PREFERRED_SIZE
))
.
addContainerGap
(
21
,
Short
.
MAX_VALUE
))
);
panel_1
.
setLayout
(
gl_panel_1
);
JLabel
lblKod
=
new
JLabel
(
"Kod:"
);
lblKod
.
setFont
(
FONT_LABEL
);
JLabel
lblNazwa
=
new
JLabel
(
"Nazwa:"
);
lblNazwa
.
setFont
(
FONT_LABEL
);
JLabel
lblKurs
=
new
JLabel
(
"Kurs:"
);
lblKurs
.
setFont
(
FONT_LABEL
);
lbl_KodWaluty
=
new
JLabel
(
"kod"
);
lbl_KodWaluty
.
setFont
(
FONT_WARTOSC
);
lbl_NazwaWaluty
=
new
JLabel
(
"nazwa"
);
lbl_NazwaWaluty
.
setFont
(
FONT_WARTOSC
);
lbl_KursWaluty
=
new
JLabel
(
"1.0000"
);
lbl_KursWaluty
.
setFont
(
FONT_WARTOSC
);
GroupLayout
gl_panel
=
new
GroupLayout
(
panel
);
gl_panel
.
setHorizontalGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
gl_panel
.
createSequentialGroup
()
.
addContainerGap
()
.
addGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
LEADING
,
false
)
.
addComponent
(
lblKurs
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
Short
.
MAX_VALUE
)
.
addComponent
(
lblNazwa
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
GroupLayout
.
DEFAULT_SIZE
,
Short
.
MAX_VALUE
)
.
addComponent
(
lblKod
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
95
,
Short
.
MAX_VALUE
))
.
addPreferredGap
(
ComponentPlacement
.
RELATED
,
18
,
GroupLayout
.
PREFERRED_SIZE
)
.
addGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addComponent
(
lbl_KodWaluty
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
171
,
Short
.
MAX_VALUE
)
.
addComponent
(
lbl_NazwaWaluty
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
171
,
Short
.
MAX_VALUE
)
.
addComponent
(
lbl_KursWaluty
,
Alignment
.
TRAILING
,
GroupLayout
.
DEFAULT_SIZE
,
171
,
Short
.
MAX_VALUE
))
.
addContainerGap
())
);
gl_panel
.
setVerticalGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
LEADING
)
.
addGroup
(
gl_panel
.
createSequentialGroup
()
.
addContainerGap
()
.
addGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
lblKod
)
.
addComponent
(
lbl_KodWaluty
))
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
lblNazwa
)
.
addComponent
(
lbl_NazwaWaluty
))
.
addPreferredGap
(
ComponentPlacement
.
UNRELATED
)
.
addGroup
(
gl_panel
.
createParallelGroup
(
Alignment
.
BASELINE
)
.
addComponent
(
lblKurs
)
.
addComponent
(
lbl_KursWaluty
))
.
addContainerGap
(
61
,
Short
.
MAX_VALUE
))
);
panel
.
setLayout
(
gl_panel
);
frmPrzelicznikWalut
.
getContentPane
().
setLayout
(
groupLayout
);
}
protected
void
przelicz
()
{
try
{
BigDecimal
kwota
=
new
BigDecimal
(
txtKwota
.
getText
());
String
kod
=
""
+
comboBox_Waluta
.
getSelectedItem
();
Waluta
waluta
=
tabela
.
znajdz
(
kod
);
BigDecimal
wynik
=
null
;
if
(
rdbtnWalutaNaZlote
.
isSelected
())
{
wynik
=
waluta
.
przeliczNaZlote
(
kwota
);
}
if
(
rdbtnZloteNaWalute
.
isSelected
())
{
wynik
=
waluta
.
przeliczNaWalute
(
kwota
);
}
lblPrawdziwyWynik
.
setText
(
""
+
wynik
);
lblPrawdziwyWynik
.
setForeground
(
Color
.
BLUE
);
}
catch
(
Exception
e
)
{
lblPrawdziwyWynik
.
setText
(
"błąd"
);
lblPrawdziwyWynik
.
setForeground
(
Color
.
RED
);
}
}
protected
void
wyswietlDaneWaluty
()
{
String
kod
=
""
+
comboBox_Waluta
.
getSelectedItem
();
Waluta
waluta
=
tabela
.
znajdz
(
kod
);
if
(
waluta
!=
null
)
{
lbl_KodWaluty
.
setText
(
waluta
.
getKod
());
lbl_NazwaWaluty
.
setText
(
waluta
.
getNazwa
());
lbl_KursWaluty
.
setText
(
""
+
waluta
.
getKurs
());
if
(!
txtKwota
.
getText
().
isEmpty
())
{
przelicz
();
}
return
;
}
lblPrawdziwyWynik
.
setText
(
"0.00"
);
lblPrawdziwyWynik
.
setForeground
(
Color
.
GRAY
);
}
private
void
pobierzAktualneKursy
()
{
// Pobieranie aktualnych kursów w tle (to znaczy w innym wątku)
// Aby wykonać operację w tle, w Swingu najlepiej użyć klasy SwingWorker
SwingWorker
<
Void
,
Void
>
worker
=
new
SwingWorker
<
Void
,
Void
>()
{
protected
Void
doInBackground
()
{
tabela
=
ObslugaNBP
.
pobierzBiezaceKursy
();
return
null
;
}
protected
void
done
()
{
// tu piszemy "co ma zrobić okno, gdy operacja jest zakończona"
// to będzie wykonane przez wątek EDT
odswiezDaneTabeli
();
wyswietlDaneWaluty
();
}
};
worker
.
execute
();
}
private
void
pobierzKursyDlaDaty
()
{
SwingWorker
<
Void
,
Void
>
worker
=
new
SwingWorker
<
Void
,
Void
>()
{
protected
Void
doInBackground
()
throws
Exception
{
String
data
=
txtData
.
getText
();
Tabela
nowaTabela
=
ObslugaNBP
.
pobierzKursyHistoryczne
(
data
);
if
(
nowaTabela
!=
null
)
{
tabela
=
nowaTabela
;
SwingUtilities
.
invokeLater
(()
->
{
txtData
.
setForeground
(
Color
.
BLACK
);
});
}
else
{
SwingUtilities
.
invokeLater
(()
->
{
txtData
.
setForeground
(
Color
.
RED
);
});
}
return
null
;
}
protected
void
done
()
{
odswiezDaneTabeli
();
wyswietlDaneWaluty
();
}
};
worker
.
execute
();
}
private
void
odswiezDaneTabeli
()
{
lbl_NumerTabeli
.
setText
(
tabela
.
getNumerTabeli
());
lbl_DataTabeli
.
setText
(
""
+
tabela
.
getData
());
comboBox_Waluta
.
setModel
(
new
DefaultComboBoxModel
<>(
tabela
.
getKodyWalut
()));
}
}
\ No newline at end of file
src/test/java/waluty/wersja_json/Tabela.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.time.LocalDate
;
import
java.util.Collection
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.TreeMap
;
public
class
Tabela
{
private
final
String
nazwaTabeli
;
private
final
String
numerTabeli
;
private
final
LocalDate
data
;
private
final
Map
<
String
,
Waluta
>
waluty
=
new
TreeMap
<>();
public
Tabela
()
{
nazwaTabeli
=
null
;
numerTabeli
=
null
;
data
=
null
;
}
public
Tabela
(
String
nazwaTabeli
,
String
numerTabeli
,
LocalDate
data
)
{
this
.
nazwaTabeli
=
nazwaTabeli
;
this
.
numerTabeli
=
numerTabeli
;
this
.
data
=
data
;
}
public
String
getNazwaTabeli
()
{
return
nazwaTabeli
;
}
public
String
getNumerTabeli
()
{
return
numerTabeli
;
}
public
LocalDate
getData
()
{
return
data
;
}
@Override
public
String
toString
()
{
return
"Tabela "
+
nazwaTabeli
+
" nr "
+
numerTabeli
+
" z dnia "
+
data
+
" ("
+
waluty
.
size
()
+
" walut)"
;
}
public
void
dodaj
(
Waluta
waluta
)
{
waluty
.
put
(
waluta
.
getKod
(),
waluta
);
}
public
Waluta
znajdz
(
String
kod
)
{
return
waluty
.
get
(
kod
);
}
public
Collection
<
Waluta
>
getWszystkieWaluty
()
{
return
waluty
.
values
();
}
private
static
final
String
[]
PUSTA_TABLICA
=
new
String
[
0
];
public
String
[]
getKodyWalut
()
{
return
waluty
.
keySet
().
toArray
(
PUSTA_TABLICA
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
data
,
nazwaTabeli
,
numerTabeli
,
waluty
);
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
return
true
;
if
(
obj
==
null
)
return
false
;
if
(
getClass
()
!=
obj
.
getClass
())
return
false
;
Tabela
other
=
(
Tabela
)
obj
;
return
Objects
.
equals
(
data
,
other
.
data
)
&&
Objects
.
equals
(
nazwaTabeli
,
other
.
nazwaTabeli
)
&&
Objects
.
equals
(
numerTabeli
,
other
.
numerTabeli
)
&&
Objects
.
equals
(
waluty
,
other
.
waluty
);
}
}
src/test/java/waluty/wersja_json/Waluta.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.Objects
;
public
class
Waluta
{
private
final
String
kod
;
private
final
String
nazwa
;
private
final
BigDecimal
kurs
;
public
Waluta
(
String
kod
,
String
nazwa
,
BigDecimal
kurs
)
{
this
.
kod
=
kod
;
this
.
nazwa
=
nazwa
;
this
.
kurs
=
kurs
;
}
public
String
getKod
()
{
return
kod
;
}
public
String
getNazwa
()
{
return
nazwa
;
}
public
BigDecimal
getKurs
()
{
return
kurs
;
}
@Override
public
String
toString
()
{
return
nazwa
+
" ("
+
kod
+
"): "
+
kurs
;
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
kod
,
kurs
,
nazwa
);
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
return
true
;
if
(
obj
==
null
)
return
false
;
if
(
getClass
()
!=
obj
.
getClass
())
return
false
;
Waluta
other
=
(
Waluta
)
obj
;
return
Objects
.
equals
(
kod
,
other
.
kod
)
&&
Objects
.
equals
(
kurs
,
other
.
kurs
)
&&
Objects
.
equals
(
nazwa
,
other
.
nazwa
);
}
public
BigDecimal
przeliczNaZlote
(
BigDecimal
kwota
)
{
return
kwota
.
multiply
(
kurs
).
setScale
(
2
,
RoundingMode
.
HALF_UP
);
}
public
BigDecimal
przeliczNaWalute
(
BigDecimal
kwota
)
{
return
kwota
.
divide
(
kurs
,
2
,
RoundingMode
.
HALF_UP
);
}
}
src/test/java/waluty/wersja_json/WypiszWszystkieWaluty.java
0 → 100644
View file @
9b8cc34b
package
waluty
.
wersja_json
;
import
java.util.Collection
;
public
class
WypiszWszystkieWaluty
{
public
static
void
main
(
String
[]
args
)
{
Tabela
tabela
=
ObslugaNBP
.
pobierzBiezaceKursy
();
System
.
out
.
println
(
"Pobrana tabela: "
+
tabela
);
Collection
<
Waluta
>
waluty
=
tabela
.
getWszystkieWaluty
();
for
(
Waluta
waluta
:
waluty
)
{
System
.
out
.
println
(
waluta
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment