Java GUI, a baza danych

Java GUI, a baza danych
GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Cześć

Proszę o pomoc przy problemie z javą. Mianowicie mam zbudować program w GUI, który będzie mi się łączyć z baza danych mysql i przy okazji jeszcze pobierać dane z pliku xml. Chcę się skupić na tym pierwszym. Napisałem program (graficzną), mam też kod tej bazy danych i właśnie mam problem z tą bazą. W programie mamy przycisk POŁĄCZ. Po jego kliknięciu program ma połączyć się z bazą, tekst przycisku zmienia się na ROZŁĄCZ, gdy znowu na niego klikniemy rozłącza z bazą. Nie wiem właśnie jak to zrobić. Mógłby ktoś pomóc trochę przy tym, jakaś rada czy coś? Czy to próbować w tej klasie co GUI, może tam gdzie baza i potem w niej wywołać tą klasę z gui? Z góry dziękuje i pozdrawiam.

Kod programów: http://pastebin.com/SUymMWRM

0

wywolac akcje po kliknieciu na przycisk, podczas ktorej zmieniasz setVisible(false) i w tym samym miejscu wstawiasz nowy przycisk, w ktorym tez robisz taka akcje, ze po kliknieciu sie chowa, a pojawia ten drugi przycisk.

hcubyc
to już nie lepiej wywołać jButton.setText() ?
Koziołek
@hcubyc nie ponieważ zaczynasz bawić się w sterowanie za pomocą obiektów, które nie są sprawdzane w trakcie kompilacji. Wystarczy literówka i masz gotowego babola.
2

Ja nie jestem doświadczonym programistą, ale uważam że stworzenie dwóch przycisków jest czystszym i bardziej przejrzystym rozwiązaniem, skoro każdy z nich ma inne zadanie, niż zmienianie mu tekstu, a później sprawdzanie jego wartości, żeby określić jaką akcję ma wykonać.

HE
Sprawdzanie jego wartości nie byłoby konieczne tylko w click listenerze sprawdzić czy jest połączenie jeśli tak-rozłącz jeśli nie-połącz :)
GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

@Hepek masz mniej więcej pomysł na krótki kod takiego porównania?

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:13 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

Najprostsze rozwiązanie to stworzenie jak blab pisze dwóch przycisków, które będą wywoływać odpowiednią metodę klasy odpowiedzialnej za połączenie z bazą danych i wzajemnie się ukrywać/pokazywać. Będzie to jasna i prosta separacja na poziomie GUI. Oczywiście najlepiej jakbyś przygotował sobie odpowiedni komponent (oddzielną klasę), która zamknie w sobie te dwa przyciski.

Trudniejszą lecz bardzie elastyczną metodą jest wykorzystanie wzorca obserwatora. W takim układzie naciśnięcie przycisku będzie wywoływać odpowiedni kod wszystkich podpiętych do niego obserwatorów przekazując do nich informację o typie akcji. To co będą robić obserwatorzy mając informację co oznacza kliknięcie jest już ich prywatną sprawą. To rozwiązanie pozwoli ci na dodanie wielu różnych obserwatorów, którzy będą np. zarządzać elementami GUI, połączeniem z bazą danych czy kontrolować stan obiektów pobranych wcześniej. Jest to jednak metoda wymagająca trochę wprawy i obycia z Javą i nie polecam jej na początek.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Rozumiem, szukam w miarę takiego sposobu łatwego do zrobienia, a mam mały zastój przy tym. Myślałem nad tym, aby przy warunku: "if (polacz.isSelected())" sprawdzał program czy jest połączenie z bazą, ale nie wiem właśnie jak się dokładnie odwołać do tego stanu połączenia z bazy danych tamtej klasie.

HE
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Kraków
  • Postów:233
0
glitcher napisał(a):

@Hepek masz mniej więcej pomysł na krótki kod takiego porównania?

Myślę, że klasa która inicjuje połączenie z bazą danych powinna udostępniać metodę typu isConnected() albo coś w tym stylu więc użyć jej i w zależności od wyniku wykonać połączenie lub je zamknąć :)

GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Co do tych przycisków nie dałoby się też przez ten warunek if (polacz.isSelected()) tych dwóch przycisków na zmianę wyświetlać? Dajmy na to: gdy przycisk połącz jest zaznaczony to automatycznie znika i ustawia też rozłącz jako widzialny, jednak wątpię w to troche.

edytowany 2x, ostatnio: Koziołek
HE
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Kraków
  • Postów:233
0

Nie rozumiem co masz na myśli albo wydaje mi się, że pytasz o to co poradził Koziołek.

GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

@Hepek jak mam rozumieć, metoda będzie zwracać wartości true albo false w przypadku połączenia lub nie?

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:13 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

@glitcher jeszcze prościej

Kopiuj
class ButtonListener implements ActionListener{
  
  private boolean status = false;
  public void actionPerformed(ActionEvent e) {
     status = !status;        
     // tu kod propagujący do connectora i GUI managera
  }
}

Ale to jest to rozwiązanie nr 2 o którym pisałem w wersji bardzo prymitywnej.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
HE
status != status ? nie rozumiem
Koziołek
na odwrót powinno być. W sensie przypisanie.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Prócz ukrywania przycisków i zmiany tekstu na przycisku jest jeszcze moje ulubione rozwiązanie - cały czas widoczne są oba przyciski, ale jeden z nich jest nieaktywny (setEnabled(false)). Kod aktywujący (dezaktywujący) przycisk jest prostszy niż kod podmieniający przycisk.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Dzięki Panowie działa :)

GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Witam ponownie

Chciałbym jeszcze o coś was zapytać, tzn. mam w tym programie zaimplementować parsowanie xml, tylko póki co nie wychodzi mi to zbytnio. Ma ktoś pomysł jak to wcisnąć z do programu mniej więcej, żeby to bezkonfliktowo chodziło. Tak jak sposobem z połączeniem z bazą? Sam już nie wiem. Tu podaje plik gui wraz z polaczeniem z bazą i drugi plik z kodem parsowania xml. Prosiłbym o jakieś porady tudzież mnie jakoś nakierować :) Z góry dziękuje :)

http://4programmers.net/Pastebin/2851
http://4programmers.net/Pastebin/2852

Tak dokładnie ma to polegać na tym, że po nacisnieciu przycisku import xml ma zaimportowac z pliku xml dane do bazy :)

edytowany 1x, ostatnio: glitcher
LZ
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:9
0

Wydaje mi się że prościej będzie użyć xstream
tut:
http://xstream.codehaus.org/tutorial.html.

GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

mówisz, że zamiast parsowania xml? Tylko, że ja mam narzucone tą metodą a nie inna właśnie ;/

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

do obsługi xml-a ja zawsze używam DOM-aa z bibliotek org.w3c
jest to naprawdę proste wszystko wyciągasz sobie z xml-a pojedyńczymi komendami, no i nie trzeba żadnych zewnętrznych bibliotek dołączać
http://docs.oracle.com/javase/tutorial/jaxp/dom/readingXML.html

GL
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:29
0

Cześć wszystkim, małe pytanie co do kodu tego, użyłem tego parsera i nie chce chodzic coś, nie importuje tego xmla jak powinien. Drugi problem to 2 wyjatki. Przy naciskaniu przycisku wykonaj oraz zakoncz jesli wczesniej nic nie zrobiles, to wywala bład (program chodzi, ale tam w netbeansie sypnie expceptionami. Może też mi ktoś przy tych rzeczach jakoś pomóc skorygować tego parsera i wyjątki ;p byłbym wielce wdzięczny :)

KOD:
http://wklej.org/id/1264420/

edytowany 1x, ostatnio: glitcher

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.