Java GUI, a baza danych

Odpowiedz Nowy wątek
2014-01-02 20:57
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

Pozostało 580 znaków

2014-01-02 21:08
blab
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.

to już nie lepiej wywołać jButton.setText() ? - hcubyc 2014-01-02 21:14
@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. - Koziołek 2014-01-02 21:36

Pozostało 580 znaków

2014-01-02 21:19
blab
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ć.

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 :) - Hepek 2014-01-02 21:23

Pozostało 580 znaków

2014-01-02 21:34
0

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

Pozostało 580 znaków

2014-01-02 21:34
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.

Pozostało 580 znaków

2014-01-02 21:44
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.

Pozostało 580 znaków

2014-01-02 21:47
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ąć :)

Pozostało 580 znaków

2014-01-02 21:48
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, 2014-01-02 21:52

Pozostało 580 znaków

2014-01-02 21:53
0

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

Pozostało 580 znaków

2014-01-02 21:56
0

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

Pozostało 580 znaków

2014-01-02 21:56
0

@glitcher jeszcze prościej

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.

edytowany 1x, ostatnio: Koziołek, 2014-01-03 07:25
status != status ? nie rozumiem - Hepek 2014-01-02 22:50
na odwrót powinno być. W sensie przypisanie. - Koziołek 2014-01-03 07:25

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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