Co robię źle przy przekazywaniu wartości zmiennej do JTextArea?

2015-02-02 17:11
0

Siema, mam problem z tym kodem (działający bez żadnych modyfikacji) :P

public class TProstaInstrukcja {

    String nazwaZmiennej;
    TWyrazenie wyrazenie = null;
    ListaZmiennych listaZmiennych = null;

    public TProstaInstrukcja(String nazwaZmiennej, TWyrazenie wyrazenie,
            ListaZmiennych listaZmiennych) {
        //System.out.println("Wstawiam ASSIGN:");
        this.nazwaZmiennej = nazwaZmiennej;
        this.wyrazenie = wyrazenie;
        this.listaZmiennych = listaZmiennych;
    }

    public TProstaInstrukcja(TWyrazenie wyrazenie) {
        //System.out.println("Wstawiam PISZ:");
        this.wyrazenie = wyrazenie;
    }

    public void wykonaj() {

        if (nazwaZmiennej != null) {

            int wartosc = wyrazenie.wykonaj();

            Zmienna zmienna = listaZmiennych.pobierzWedlugNazwy(nazwaZmiennej);

            if (zmienna != null) {
                zmienna.zmienWartosc(wartosc);

                //System.out.println("Przypisanie wartosci "+wartosc+" dla zmiennej "+zmienna.pobierzNazwa());
            } else {
                listaZmiennych.piszZmienne();
                throw new Error("Nie moge znalezc zmiennej o nazwie: " + nazwaZmiennej);

            }

        } else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);
        }
    }
}

Problem pojawia się gdy próbuję wyświetlić tekst w polu tekstowym jTextArea w sposób identyczny jak w tym temacie: http://4programmers.net/Forum/Newbie/246434-jtextarea_-_dostep_z_poziomu_innej_klasy

To powinienem dostać na wyjściu po odpaleniu programu:

PRINT: 1
PRINT: 3
PRINT: 5
PRINT: 7
PRINT: 9
PRINT: 25

A jak w tym miejscu...:

 else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);

            a.tekst.setText("PRINT: " + wartosc);

        }

... próbuję przekazać cokolwiek do pola tekstowego to na wyjściu (za System.out.println()) dostaję tylko:

PRINT: 1

A w polu tekstowym nic się nie wyświetla, nawet z innych "miejsc".

Co mogę robić źle? Proszę o jakieś wskazówki... Sposób wykonania jest nieistotny byle tylko działało.

Link do całego projektu w NetBeans w załączniku.

Ogólnie chodzi o to by zrobic do tego GUI (gui mam już częściowo zrobione, ale nie umieściłem go w załączonym projekcie, bo jest mi to na zaliczenie potrzebne, a nie chcę być posądzony, że wszystko skopiowałem).

`dodanie znaczników i ``` - @furious programming

edytowany 8x, ostatnio: witek901, 2015-02-04 02:59
Dwa pierwsze linki straszą reklamami, z trzeciego ściąga się walnięte archiwum. - bogdans 2015-02-02 21:53
Ja też mam adblocka, z adblockiem w ogóle nie można ściągnąć - trzeba go wyłączyć. - bogdans 2015-02-02 23:05

Pozostało 580 znaków

2015-02-02 19:11
0

Metoda a.tekst.setText("NowyTekst") wymazuje cały tekst i wstawia podany tekst do kontrolki.

Jeżeli już, to najprościej uzyć a.tekst.setText(a.tekst.getText() + "DalszyTekst").

A najlepiej bedzie utworzyć StringBuilder, do niego wpisywać wszystko, co po kolei chcesz wypisać, a na koniec jedno wywołanie setText(Sb).

edytowany 2x, ostatnio: andrzejlisek, 2015-02-02 19:12

Pozostało 580 znaków

2015-02-02 20:02
0

Głównym problemem jest samo wstawienie:

a.tekst.setTexT("Nieważne co tu jest");

co zresztą opisałem wyżej... po tym na wyjściu za pomocą System.out.println()


 jest wyświetlany "zły wynik", że tak to ujmę najprościej, już pomijając te wyświetlanie tego w polu tekstowym. Jak tylko wstawię tą jedna linikę kodu to wszystko się sypie... tu nie rozumie właśnie w czym problem.
edytowany 1x, ostatnio: witek901, 2015-02-02 20:07

Pozostało 580 znaków

2015-02-02 20:19
0

Umieść projekt w jakimś rozsądnym miejscu (bez informacji o wygraniu samochodu i tym podobnych bredni).


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-02-03 15:09
0

Mógłby mi ktoś chociaż podpowiedzieć jak mogę pobrać wartość zmiennej z tego fragmentu kodu:

else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);

i przekazać go do innej klasy, bez brania pod uwagę przekazywania tego za pomocą setText() do pola tekstowego (bo tak się nie da, opis sytuacji wyżej)? Chciałbym dopiero w klasie, w której mam gui przekazać ją do pola tekstowego.

Proszę o wskazówki co mogę zastosować itp.

No chyba, że ktoś wie jak przekazać to za pomocą setText(), tak by program działał poprawnie.

Wybaczcie, że tak "żebram", ale jestem zdesperowany, bo zostało mi coraz mniej czasu żeby to zrobić, a wszystko co próbowałem sam zawodzi...

`dodanie znaczników ``` - @furious programming

edytowany 2x, ostatnio: furious programming, 2015-02-03 17:02

Pozostało 580 znaków

2015-02-03 20:29
0

W klasie TProstaInstrukcja nie ma żadnej referencji do klasy z gui. Ten kod

 else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);

            a.tekst.setText("PRINT: " + wartosc);

        }

nie ma się prawa skompilować. Przekaż referencję w konstruktorze.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: furious programming, 2015-02-03 22:14

Pozostało 580 znaków

2015-02-03 20:51
0

Zrobiłem to tak w TProstaInstrukcja zanim jeszcze napisałem tego posta:

private Gui a;

...

public TProstaInstrukcja(Gui a) {
        this.a = a;
    }

...

else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);

            a.tekst.setText("PRINT: " + wartosc);

        }

Ten kod mam zaimplementowany w gui, a konkretnie pod przyciskiem, który uruchamia ten parser:

try {
            //PARSOWANIE
            TProgram result = (TProgram) parser_obj.parse().value;

            System.out.println("Po parsowaniu...");

            //UZYCIE DRZEWA OBLICZEN
            result.wykonaj();

        } catch (Exception e) {
            System.out.println("Tekst wyjatku po parsowaniu: " + e.getMessage());
            System.exit(0);
        }

Efekty są takie jak opisałem w 1 poście.

Próbowałem jeszcze wiele innych "rzeczy" i doszedłem do wniosku, że najprościej będzie jak to zapisze do pliku tekstowego, a potem wczytam do pola tekstowego. Inaczej nie potrafię, a widzę, że tutaj też nikt nie wie albo nie chce pomóc. Siedzę nad tym od czwartku od rana do wieczora i stwierdziłem, że szkoda życia i nerwów. Lepiej zrobić coś na odpier... niż wcale.

edytowany 1x, ostatnio: witek901, 2015-02-03 20:54

Pozostało 580 znaków

2015-02-03 23:17
0

Masz niepoważne podejście, opisujesz problem, zamieszczasz kawałek kodu, udostępniasz projekt. Ale udostępniony projekt i zamieszczony kod różnią sie od tego kodu na którym występuje problem.
Sposób udostępnienia projektu też pozostawia wiele do życzenia, albo strony wymagające oglądania reklam, albo walnięte archiwum.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-02-03 23:51
0

Nie mam całego dnia żeby znaleźć jakiś mega super hosting, który Tobie przypasuje prosiłem o sugestie to nic nie napisałeś (to co podlinkowałem jakoś działa)... A projekt wrzuciłem taki, bo stwierdziłem, że będzie bardziej "czytelny", a wszystko opisałem (dorobić proste gui i konstruktor to max 2 minuty). Poza tym już nie potrzebuję łaski i założę się, że sam nie wiesz jak to zrobić... Więcej tu już po nic wejdę na to forum, więcej narzekania, robienia łaski, itp. niż pomocy.

Ja też nie mam całego dnia, żeby użerać się ze ściąganiem Twojego projektu. Ty musisz zapewnić, żeby ściąganie było proste. Teraz piszesz dorobić proste gui a w pierwszym poście napisałeś gui mam już zrobione. To co jest prawdą? A zakład przegrałeś. - bogdans 2015-02-04 00:12
Mam zrobione, ale nie wrzucę go do internetu, bo się napracowałem, miałem taki problem, który opisałem wyżej, pisząc proste gui miałem na myśli zwykłe okno z przyciskiem i polem tekstowym to jest max 2 minuty. Jakbym wiedział, że to tak skomplikuje komuś życie to bym tu się nigdy nie zarejestrował i o nic bym nie prosił. A co do zakładu to możesz się cieszyć, wierzę Ci na słowo, nie musisz udowadniać... łaski mi nie potrzeba. Sam sobie poradziłem nie zrobiłem tego tak jak miało być i nie tak jak chciałem, ale jak się nie ma co się lubi to się lubi co się ma. - witek901 2015-02-04 00:33
A skoro to dla Ciebie takie proste to mogłeś coś podpowiedzieć, ale trudno... - witek901 2015-02-04 00:35
Sam jesteś sobie winien, bo ukryłeś kod gui. Żeby opisać jak zmienić wygląd gui z klasy TProstaInstrukcja, konieczna jest znajomość powiązania między tymi klasami. - bogdans 2015-02-04 07:23

Pozostało 580 znaków

2015-02-04 01:02
0

@witek901 - do przekazywania plików służą załączniki, które możesz dodać do każdego posta; Skorzystaj więc z nich, zamiast podawać linki do jakichś śmieciowych hostingów; Po drugie utrudniasz pomoc potencjalnym chętnym i miotasz się, jak ktoś zwróci uwagę, że coś robisz źle; Poza tym @bogdans napisał już kilka postów z wartościowymi odpowiedziami, więc nie wiem dlaczego podejrzewasz, że odpowiadający nie umie Tobie pomóc;

Zrób z łaski swojej to o co Cię @bogdans prosi i dokończ ten wątek w przyjaznej atmosferze.


Pozostało 580 znaków

2015-02-04 13:24
0

Dodałem do załącznika nowy projekt z prostym gui. Od razu zaznaczam żeby nie było niedomówień, że interesuje mnie wyświetlenie tylko i wyłącznie w polu tekstowym zaimplementowanym w klasie ProsteGui "tego" (SAM WYNIK) co zaimplementowane jest w klasie TProstaInstrukcja. Fragment poniższej:

else if (wyrazenie != null) {
            int wartosc = wyrazenie.wykonaj();
            System.out.println("PRINT: " + wartosc);

            a.tekst.setText("PRINT: " + wartosc);

        }

Pojawiający się w tej chwili problem:

  • Nic się nie wyświetla w polu tekstowym.
  • System.out.println() powinien w oryginalnym projekcie wyświetlić taki wynik:
    PRINT: 1
    PRINT: 3
    PRINT: 5
    PRINT: 7
    PRINT: 9
    PRINT: 25

Niestety gdy tylko wstawię tą jedną linijkę:

a.tekst.setText("PRINT: " + wartosc);

na wyjściu (za System.out.println()) dostaję to:
PRINT: 1
w polu tekstowym nic się nie wyświetla...

Próbowałem wiele innych sposobów, ale każdy zawodził. Może faktycznie wcześniej źle przedstawiłem problem, ale wydawało mi się, że wiadomo o co chodzi...

Mam nadzieję, że nie pisałem tego posta na marne i ktoś może jednak da jakąś wskazówkę.

I nie miotam się tylko wczoraj byłem cały dzień zdenerwowany, bo nie mam ostatnio na nic czasu, każdy akurat coś ode mnie chce, do tego pożyczyłem siostrze nowy samochód, a ona go skasowała, a ja mam tak, że najpierw coś zrobię, a później tego żałuję jak kogoś uraziłem to przepraszam...

  • Test.zip (0,75 MB) - ściągnięć: 55
edytowany 5x, ostatnio: witek901, 2015-02-04 13:33

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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