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:około 2 miesiące
  • 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:około 2 miesiące
  • 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
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)