Program okienkowy - historia tankowania samochodu

Program okienkowy - historia tankowania samochodu
M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Witam!

Posiadam arkusz kalkulacyjny Excel i w nim porobione tabelki, w które dodaje tankowania samochodu i oblicza mi od razu spalanie, cena kilometra itp.
Jako, że staram się trochę pouczyć programowania, to wpadłem na pomysł, żeby stworzyć mały program okienkowy, który będzie miał odpowiednie okna, gdzie będę mógł wpisać wszystkie potrzebne dane, na początek cenę paliwa, ilość zatankowanych litrów i przejechane kilometry od ostatniego tankowania i oczywiście datę.

Zastanawiam się jak zacząć i od czego. Jakich bibliotek do tego użyć i jak zrobić, żeby po wciśnięciu przycisku program zczytał wszystkie dane z pól i obliczył to co chcę. I druga kwestia, której nie wiem jak rozwiązać, gdzie te dane mają być trzymane i jak będzie można je łatwo odczytać z poziomu programu w formie, np. tabeli, w której będą pokazane wszystkie tankowania.

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:1272
1

Do stworzenia GUI polecam JavaFX. Jeżeli chcesz sczytywać dane z excela to użyj Apache POI. Możesz nią też zapisywać dane właśnie w excelu, ale lepszym wyborem będzie jakaś mała plikowa baza danych np. SQLite lub H2

Zobacz pozostałe 10 komentarzy
krzysiek050
Krąży mit że Java się nie nadaje do okienek, bo w swingu od dłuższego czasu się nic nie dzieje, a javaFX została dodana do jdk dopiero od wersji 8. Prawdziwym problemem jest to że nie każdy ma javę, a większość ma .NET. Dlatego jeżeli chcesz napisać aplikację dla wielu użytkowników to lepiej wybrać inne narzędzie, ale jeżeli już umawiasz się z firmą to spokojnie możesz to zrobić w Javie równie wydajnie co w .NET.
HI
Na początku mojej przygody z programowaniem przymierzyłem się do Javy i jakoś mnie odstraszyła. Sama instalacja środowiska to już zabawa (pamiętam że trzeba było ręcznie jakieś zmienne środowiskowe dodawać). VS instaluje w parę minut i mam gotowe narzędzie do pracy.
krzysiek050
Jeżeli dla kogoś dodanie zmiennej środowiskowej jest poza zasięgiem który sobie wyznaczył, to lepiej żeby programowanie też porzucił.
M1
Chyba się zainteresuje JavaFX
HI
@krzysiek050 a czy ja napisałem, że to jest po za zasięgiem ? Po prostu m.in. np przez to Java wydała mi się "niewygodna". Być może to błędne wrażenie ale przez to zacząłem przyglądać się innym językom.
HI
  • Rejestracja:około 13 lat
  • Ostatnio:około 19 godzin
  • Postów:1857
0

Od czego zacząć ?
Standardowo: od kursu od podstaw wybranego języka.
Przerobienie ze zrozumieniem dowolnego kursu przyniesie Ci odpowiedź na część pytań (np. jak zrobić, żeby po wciśnięciu przycisku program zczytał wszystkie dane z pól i obliczył to co chcę).

Dane najłatwiej (i korzystniej) trzymać w bazie danych.
W zależności od potrzeb masz bazy plikowe, które nie wymagają instalacji serwera, lecz dają mniejsze możliwości choć myślę że na początek spokojnie wystarczą (np. SQLite, czy SQLCE), lub bazy danych z silnikiem np SQL Server Micorsoftu (w wersji express darmowy).

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Czyli, żebym mógł trzymać, gdzieś dane to mam zainstalować jakąś bazę danych i połączyć ją z moim programem w javie?
Co do podstaw, to wiem, jak dodać funkcję do przycisku, tylko nie wiem dokładnie którą, żeby akurat szczytywał mi dane.

HI
  • Rejestracja:około 13 lat
  • Ostatnio:około 19 godzin
  • Postów:1857
0

Nie koniecznie zainstalować bo tak jak wspomnieliśmy istnieją plikowe bazy bez instalacji.

A pod przycisk podpinasz funkcję którą napiszesz ;).

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:1272
0

Do plikowej bazy danych nie musisz mieć postawionego serwera. Musisz ściągnąć sterownik bazy danych która Cię interesuje i operować na nim normalnie, z tym że wszystko będzie pisane do pliku.

Funkcję sam musisz sobie napisać. Podejrzewam że masz jakieś pola do wpisania tekstu i przycisk. Po wciśnięciu przycisku powinieneś sczytać dane z tych pól, sprawdzić czy są prawidłowe i jeżeli tak to zapisać do bazy.

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Oj coś czuje, że to co początkowo wydawało mi się dość proste, okazuje się chyba ponad moje siły.
Myślałem, że zrobię sobie "okienko" wstawię kilka pól dodam buttona i przypisze funkcję obliczającą i gdzieś to zapiszę, a tu widzę, że jednak nie będzie tak prosto.
A nie można zrobić czegoś na kształt kalkulatora? Tylko, że zamiast przycisków z liczbami, pola do wpisania liczb i przycisk, jak w kalkulatorze, podający wynik i albo automatyczne, albo dodatkowy przycisk eksportujący dane do pliku?

saviolaa
  • Rejestracja:prawie 10 lat
  • Ostatnio:5 miesięcy
0
Michal1511 napisał(a):

Oj coś czuje, że to co początkowo wydawało mi się dość proste, okazuje się chyba ponad moje siły.
Myślałem, że zrobię sobie "okienko" wstawię kilka pól dodam buttona i przypisze funkcję obliczającą i gdzieś to zapiszę, a tu widzę, że jednak nie będzie tak prosto.

@krzysiek050 post wyżej Ci wytłumaczył że właśnie tak powinna być zbudowana aplikacja.
W tych kilku polach wprowadzasz sobie dane, pod buttonem masz napisaną funkcje obliczającą wszystkie potrzebne informacje, które później są zapisywane do bazy danych.

Możesz na początek napisać program który wyniki wyświetli w polach aplikacji, a dopiero później sobie dodasz jakąś bazę.

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Jako pole tekstowe mogę użyć JTextArea?

Użyłem JTextField.
Tylko nie mogę zmienić jego lokalizacji i wyświetla się na środku.

edytowany 1x, ostatnio: Michal1511
saviolaa
  • Rejestracja:prawie 10 lat
  • Ostatnio:5 miesięcy
0
M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Użyłem takiego wpisu:

Kopiuj
setLayout(new FlowLayout());

Bo bez tego, TextField w ogóle się nie wyróżniał od tła, a teraz wygląda jak okienko, tyle, że nie mogę zmienić lokalizacji.

Ok, napisałem coś takiego:
http://iv.pl/images/46939262593641909392.png

Są tam dwa TextFieldy, jeden button i MenuBar z Itemem, który zamyka program.
Teraz muszę znaleźć informację co dodać do buttona, żeby zczytywał informacje z pól i wykonywał określone obliczenia.

edytowany 5x, ostatnio: Michal1511
Lectre
Popraw link; usuń znaczniki.
M1
Już poprawiłem :) Dzięki, bo właśnie nie wiedziałem co jest grane ;)
HI
  • Rejestracja:około 13 lat
  • Ostatnio:około 19 godzin
  • Postów:1857
0

Hej,
Poczytaj sobie o ActionListener. Poniżej masz podgląd jak to powinno mniej więcej wyglądać, ale co i jak- sam poczytaj żeby się nauczyć.

JButton przycisk = new JButton("tekst");
add(przycisk);
przycisk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String x = poleTekstowe.getText();
}
});

Zwróć uwagę na linijkę "String X = poleTekstowe.getText();". Na wciśnięcie przycisku pobrałem tutaj zawartość pola tekstowego i umieściłem ją w zmiennej "x" typu String. Dla Ciebie oczywiście to nie wystarczy, Ty musisz najpierw sprawdzić czy pole tekstowe na pewno zawiera liczbę i wykonać rzutowanie na jakąś zmienną typu int/double/etc.

Zakłądam, że zmienne i ich typy (absolutne podstawy) masz ogarnięte. Jeśli tak to do Twojego programu musisz ogarnąc jak się posługiwać ActionListenerem. Jeśli źle zakłądam, to wracaj do podstaw i programów konsolowych ;)

Pozdrawiam i życzę powodzenia

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Dzięki za odpiwedź i przykład ;)
Co do ActionListener to czytałem o tym, bo miałem przeboje z pierwszym programem i właśnie ActionListener :)

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0

Wróciłem do pracy nad programikiem po weekendzie.
Stworzyłem (testowo) 3 pola tekstowe i dodałem funkcje mnożenia po wpisaniu w oba pola liczby i naciśnięciu ENTER zostaje wyświetlony wynik w trzecim polu.
Dodałem też do buttona funkcję zapisu wyniku do pliku, jednak zapisuje mi tylko sam wynik. Chciałbym, aby przed wynikiem był dopisywany napis, np. Kwota tankowania: Ok, z tym sobie poradziłem.
Mam jednak inny problem, otóż, gdy kilknę zapisz i zapisze plik to zamyka się cały program. Jak temu zaradzić, bo nie mam pomysłów.

Kod:

Kopiuj
public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        if("Zapisz".equals(cmd)){
        JFileChooser jFileChooserZapiszPlik = new JFileChooser();
            int odpowiedz = jFileChooserZapiszPlik.showSaveDialog(this);
        if (odpowiedz == jFileChooserZapiszPlik.APPROVE_OPTION) {
            File file = jFileChooserZapiszPlik.getSelectedFile();
            try {
                FileWriter out = new FileWriter(file + ".txt");
                out.write(CenaKilometra.getText() + "Kwota Tankowania");
                out.close();
            } catch (IOException e1) {
                System.out.println("Nie mogę zapisać pliku: " + file.getAbsolutePath());
                System.out.println("Problem: " + e1);
            }
        }}
        else if ("Zamknij".equals(cmd));{
        System.exit(0);}
    }
edytowany 1x, ostatnio: Michal1511
0

Zamyka bo masz System.exit(0);

1

Tutaj masz POC:
http://ideone.com/XzM272

Zauważ co robi średnik po ifie/else.

M1
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:29
0
Czarny Krawiec napisał(a):

Zauważ co robi średnik po ifie/else.

Dzięki, nie zwróciłem uwagi.

Teraz muszę znaleźć rozwiązanie, żeby program do już stworzonego dokumnetu dopisywał nowe dane, a nie tworzył nowy dokument ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.