JCheckBox i wykonanie metody

0

Witam.
Próbuję podłączyć pod jcheckbox'a wykonanie metody, tzn jeśli zaznaczymy go to po wpisywaniu wartości początkowych i ustawianiu suwaków będzie wykonywana jedna metoda a jak zaznaczę drugi to druga. Proszę o jakieś wskazówki, podpowiedzi..;>

0

jCheckBox.addChangeListener() ?

0

Jeśli to zastosuję to nawet jak najadę kursorem nad JCheckbox albo znad niego zabiore kursor to mi się wykonuje to co chce:

JCheckbox.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                System.out.println("wykonane");
            }
        });

Coś robię nie tak?
P.S. Wyświetlenie napisu w konsoli to nie jest główny cel mój, wstawiłem sobie to żeby sprawdzać jak to działa.


0

Możesz sprawdzić stan checkboxa metodą jCheckBox.isSelected(). Z Twojego opisu nie potrafię zgadnąć, w którym momencie ma się rozpocząć wykonywanie metody: użytkownik w coś klika, czy program ma się sam domyślić, że już pora na wykonanie metody.

0

Właśnie z tej moty korzystam:

public void itemStateChanged(ItemEvent e) {
   if (JCheckBox.isSelected()) {
       // tu chciałbym wykonać metodę
   }
}

Chodzi mi o to że mam dwa JCheckBoxy i jak zaznaczę jeden z nich to po wpisaniu danych będzie liczył jakiś problem, a jak zaznaczę drugi to będzie liczył inny problem.

0

Co to znaczy "po wpisaniu danych"? Jak program ma rozpoznać, że dane zostały wpisane? Musisz dodać przycisk zatwierdzający dane lub dodać do pól tekstowych KeyListenera, który np. po naciśnięciu Enter rozpocznie metodę. ChangeListener podpięty do checkboxów nie jest Ci potrzebny.

0
no napisał(a)

Co to znaczy "po wpisaniu danych"? Jak program ma rozpoznać, że dane zostały wpisane? Musisz dodać przycisk zatwierdzający dane lub dodać do pól tekstowych KeyListenera, który np. po naciśnięciu Enter rozpocznie metodę. ChangeListener podpięty do checkboxów nie jest Ci potrzebny.

"po wpisaniu danych" - po wpisaniu wartości początkowych w JTextField i ustawieniu JSlidera. Mam już przycisk który to uruchamia. wszystko już jest podłączone i chodzi, tylko że teraz chcę to samo policzyć ale innym sposobem, więc stworzyłem JCheckBoxy pod które próbuję podłączyć te sposoby(metody).

0

To nie jest dobry pomysł, użytkownik programu będzie mocno zaskoczony jak kliknięcie w Checkboxa uruchomi jakąś metodę.
Jeśli koniecznie chcesz tak zrobić, to

public void itemStateChanged(ItemEvent e) {
   if (JCheckBox.isSelected()) {
       // tu sprawdź czy pola tekstowe są wypełnione i JSlider jest ustawiony, jeśli tak, to wykonaj metodę.
   }
}

Imo, metody powinien uruchamiać przycisk

....actionPerformed(....)
{
    if(jCheckBox1.isSelected()) //zrób coś
    else
       if(jCheckBox2.isSelected()) //zrób coś innego

}

Użytkownik nie będzie wiedział co się wykona jak zaznaczy oba Checkboxy. Dlatego lepiej użyć dwa JRadioButton i umieścić je w ButtonGroup. Wtedy nie można zaznaczyć dwóch.

0
bo napisał(a)

To nie jest dobry pomysł, użytkownik programu będzie mocno zaskoczony jak kliknięcie w Checkboxa uruchomi jakąś metodę.

Źle się wyraziłem. klikniecie w checkboxa nie oznacza ze od razu będzie wykonywana metoda, tylko że będzie liczone za pomocą tej metody przypisanej do niego, tzn zmieniając wartości początkowe będzie wykonywana metoda od razu. ogólnie: włączamy aplet i są jakieś wartości wpisane w textfield i suwaki ustawione. zaznaczamy którą metodą chcemy policzyć, zmieniamy dane i od razu wykonywana jest metoda.

// tu sprawdź czy pola tekstowe są wypełnione i JSlider jest ustawiony, jeśli tak, to wykonaj metodę.

JSlider przecież zawsze jest ustawiony na jakąś wartość. Czy może się mylę?

Imo, ...

Imo?

if(jCheckBox1.isSelected()) //zrób coś

no i właśnie tego "zrób coś" nie wiem jak tu wpisać.

Użytkownik nie będzie wiedział co się wykona jak zaznaczy oba Checkboxy. Dlatego lepiej użyć dwa JRadioButton i umieścić je w ButtonGroup. Wtedy nie można zaznaczyć dwóch.

Jcheckboxy też da się umieścić w buttongroup, już mam to zrobione.</quote>

0

1.Nic nie rozumiem

zmieniamy dane i od razu wykonywana jest metoda
, dotychczasowe dane to 531, użytkownik chce zmienić na 532, wymazał końcową jedynkę, dane się zmieniły (na 53) zatem metoda się od razu wykonuje?

if(jCheckBox1.isSelected()) //zrób coś
no i właśnie tego "zrób coś" nie wiem jak tu wpisać.

Powiedz że żartujesz.

0

zmieniamy dane i od razu wykonywana jest metoda
, dotychczasowe dane to 531, użytkownik chce zmienić na 532, wymazał końcową jedynkę, dane się zmieniły (na 53) zatem metoda się od razu wykonuje?</quote>

Te wpisywane dane są w przedziale od -5 do 5 więc dużej to różnicy nie zrobi. W ostatecznej wersji dane mają być wszystkie na suwakach więc takiej opcji jak napisałeś nie będzie.

if(jCheckBox1.isSelected()) //zrób coś
no i właśnie tego "zrób coś" nie wiem jak tu wpisać.

Ta metoda którą chcę tu wpisać ma argument Graphics g. Dla pewności że dobrze się wyrażam:"public void metoda(Graphics g)".

0

Skoro musisz wywołać metodę z argumentem typu Graphics to zapewne masz spieprzony projekt.

0

A możesz wytłumaczyć dlaczego tak twierdzisz? :>

0

to może inaczej... bo tak czytam od góry do dołu te posty i mam wrażenie jakbyś rysiu o czym innym niż na początku zaczął mówić. Nawiązując do kilku pierwszych postów (to może Ci rozwiąże sprawę, jeżeli dobrze zrozumiałem czego oczekujesz):

checkBox.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        //co tam ma się dziać
    }
});

actionPerformed zareaguje jak NACIŚNIESZ na checkBoxa (zaznaczając go lub odznaczająć).

checkBox.isSelected()ta metoda zaś zwróci Ci true (jeżeli ten checkBox jest zaznaczony) albo false (jeżeli nie jest).

0

No ok, ale w tym "co tam ma się dziać" chcę właśnie umieścić tą metodę co wcześniej o niej pisałem i "bo" napisał że mam coś zwalone, źle napisane skoro mam jej argument Graphics g.

0
final Graphics zmienna = g;
checkBox.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        //co tam ma się dziać albo:
        metodaBlabla(zmienna);
    }
});
void metodaBlabla (Graphics g) {
    //co tam ma się dziać
}

Nie wiem czy o to Ci chodzi... po prostu zakładam, że 'wiesz co to typ Graphics' i świadomie go użyć planujesz. Zakładam, że Twoje pytanie nie polega na 'skąd wziąć te 'g' do wywołania metody'. ;)
'bo' tylko przypuszczać może, że 'masz coś zwalone' bez kodu nie jest w stanie tego powiedzieć, bo zaprogramować daną sytuację możesz na wiele różnych sposobów.

0

@Billy napisał

Zakładam, że Twoje pytanie nie polega na 'skąd wziąć te 'g' do wywołania metody'. ;)

A ja założyłem, że właśnie na tym polega problem.

0

Nie wiem czy o to Ci chodzi... po prostu zakładam, że 'wiesz co to typ Graphics' i świadomie go użyć planujesz. Zakładam, że Twoje pytanie nie polega na 'skąd wziąć te 'g' do wywołania metody'. ;)

Wiem co to typ Graphics i świadomie go użyć planuje;) Możliwe że moje pytanie właśnie do tego się sprowadza co pisał 'bo' że nie wiem "skąd wziąć te g":/

final Graphics zmienna = g;
kiedy tak implementuje to NB wywala mi że "nie może znaleźć symbolu 'variable g'.

0

Właśnie to, że potrzebna Ci jest zmienna typu Graphics miałem na myśli pisząc,że zapewne masz coś spieprzone i próbujesz (musisz) wywoływać metodę paint(Graphics) lub paintComponent(Graphics).

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