Zapis z 3 osobnych TextArea do jednego

0

Witam

Jako że to mój pierwszy post pragnę się serdecznie przywitać :)

Mam taki problem, otóż w mojej aplikacji z RS-232 schodzą mi wyniki, obrabiam je i wrzucam do trzech różnych JTextArea (są to wyniki pomiarowe, więc mało treści a wiele wierszy).

I teraz potrzebuję zapisać te wszystkie wyniki do jednego pliku, z zachowaniem formatowania (tj. 3 kolumny).

No i właśnie tutaj pojawia się problem bo nie za bardzo wiem jak to zrobić :(.

Na chwilę obecną raczej kręcę się w kółko bo stworzyłem sobie dodatkowy JTextArea (i tak będzie ukryty), kopiuje całą zawartość okien, ale do komponentu zZapisz kopiuje mi nie w rzędach a jak leci.

Próbowałem z metoda setCaretPosition(), ale poległem podobno chce int-a, a gdy mu go podaje to wywala błędem.

             tObliczonaOdl.requestFocusInWindow();
             tObliczonaOdl.selectAll();
             String wybranyTekst ="";
             wybranyTekst = tObliczonaOdl.getSelectedText();
             
             tNapieciaDane.requestFocusInWindow();
             tNapieciaDane.selectAll();
             String wybranyTekst2="";
             wybranyTekst2 = tNapieciaDane.getSelectedText();
             
             tCzestotliwoscDane.requestFocusInWindow();
             tNapieciaDane.selectAll();
             String wybranyTekst3 = "";
             wybranyTekst3 = tCzestotliwoscDane.getSelectedText();
             
             tZapis.insert(wybranyTekst, tZapis.getCaretPosition());
             tZapis.insert(wybranyTekst2, tZapis.getCaretPosition());
             tZapis.insert(wybranyTekst3, tZapis.getCaretPosition());

Na chwile obecną mam tyle, jak widać dodaje mi do zZapisz dane, ale nie tak jakbym tego chciał.

Myslałem na pętla while z setCaretPosition() i wtedy sukcesywne zapisywanie, no ale jak pisałem wcześniej, na tej metodzie się wyłożyłem.

Mam nadzieję że rozumiecie o co mi chodzi :) Tak więc bardzo prosiłbym o jakąś wskazówkę.

Pozdrawiam

0

A nie prościej wyniki obliczeń wrzucać do tych trzech JTextArea i jednocześnie do jakiejś zmiennej, np. typu ArrayList<String>?
A jeśli zapisywać do pliku będziesz zawsze, to możesz też pisać na bieżąco.

0

O właśnie! Świetny pomysł z ArrayList.

Na razie spłodziłem cos takiego:

                 ArrayList<String> tabela = new ArrayList<String>();
                 tabela.add(String.valueOf(odleglosc_liczba_cm_koncowa)+"   "+String.valueOf(napiecie)+"    "+"czest");
                // System.out.println();
                 Aplikacja_RS232.tZapis.setText(tabela.toString());

Jak dodać nową linię w ArrayList? Oczywiście wiem że można by System.out.println();, ale ja to wyrzucam na TextArea a nie na konsolę.

0
mr.mehow napisał(a):

O właśnie! Świetny pomysł z ArrayList.

Na razie spłodziłem cos takiego:

ArrayList<String> tabela = new ArrayList<String>();               
tabela.add(String.valueOf(odleglosc_liczba_cm_koncowa)+"   "+String.valueOf(napiecie)+"    "+"czest");
System.out.print(tabela);

Jak dodać nową linię w ArrayList? Oczywiście wiem że można by System.out.println();, ale ja to wyrzucam na TextArea a nie na konsolę.
\n :fp:

0

Wiem że \n :P Ale wtedy wynik wygląda tak:

][47.6   2.158    czest, 
][47.6   2.157    czest, 
][47.6   2.157    czest, 
][48.0   2.176    czest, 
]
0

Bo wywołujesz

Aplikacja_RS232.tZapis.setText(tabela.toString());

Powinno być tak:

tZapis.setText("");
for(String s: tabela)
{
    tZapis.append(s+"\n");
}
0

Dzięki! Działa.

Natomiast spaprałem sprawę bo potem zapisze to do notatnika, i jak się okazuje muszą być to zmienne typu double (ze stringów np.wykresu nie zrobimy)

Na razie zrobiłem coś takiego:

                ArrayList<Double> tabela2 = new ArrayList<Double>();
                tabela2.add(odleglosc_liczba_cm_koncowa);
                tabela2.add(napiecie);
                for(Double s: tabela2)
                {
                 Aplikacja_RS232.tZapis.append(s+"\n");
                }

I wyniki pokazuje mi w takiej formie:

21.7
0.981
21.7
0.981
21.7
0.981

Gdzie potrzebowałbym je mieć w takiej:

21.7      0.981
21.7      0.981
21.7      0.981
0

Żadna liczba typu double nie wygląda tak:

21.7    0.981

Zmień kod:

ArrayList<String> tabela2 = new ArrayList<String>();
tabela2.add(odleglosc_liczba_cm_koncowa+"   "+napiecie);
for(Double s: tabela2)
{
     Aplikacja_RS232.tZapis.append(s+"\n");
}

Poza tym, zapis Aplikacja_RS232.tZapis sugeruje, że pole tZapis jest w klasie Aplikacja_RS232 statyczne. Bardzo złe rozwiązanie.

0

No tak tylko że w tym układzie w linijce

for(Double s: tabela2)

Wyrzuca mi błąd : "Required: java.land.double Found: java.lang.String"

Po przekontrolowaniu tego na:

for(String s: tabela2)

Ładnie mi układa ten tekst w JTextArea no ale jak wrzucę to do Excela to nie mam liczb w dwóch kolumnach, każdy wiersz mam w jednym długim scalonej komórce.

bogdans napisał(a):

Żadna liczba typu double nie wygląda tak:

21.7    0.981


No tak, tutaj są dwie liczby double 21.7 i 0.981.


 > ##### [bogdans napisał(a)](http://4programmers.net/Forum/940220):
> Poza tym, zapis *Aplikacja_RS232.tZapis* sugeruje, że pole *tZapis* jest w klasie *Aplikacja_RS232* statyczne. Bardzo złe rozwiązanie.


Mógłbyś rozwinąć? :) 

Sorry za pewnie podstawowe pytania ale dopiero uczę się Javy, bo na co dzień mam styczność raczej z elektroniką i językiem C :)
0

Nie pisałeś, że będziesz otwierał w Excelu, wstaw jakiś separator

tabela2.add(odleglosc_liczba_cm_koncowa+";"+napiecie);
//lub
tabela2.add(odleglosc_liczba_cm_koncowa+"/t"+napiecie);
0

Dzięki bogdans!

Zmieniłem jeszcze kropki z double na przecinki, i można od razu wpisywać do Excela.

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