Program okienkowy - historia tankowania samochodu

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.

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

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).

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.

0

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

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

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.

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?

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ę.

0

Jako pole tekstowe mogę użyć JTextArea?

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

0

Użyłem takiego wpisu:

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.

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

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 :)

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:

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);}
    }
0

Zamyka bo masz System.exit(0);

1

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

Zauważ co robi średnik po ifie/else.

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 ;)

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