Mulla on tällaisessa server-client tyyppisessä ohjelmassa TextArea johon laitetaan kaikenlaista tekstiä ja siihen voi itsekin liittää tekstiä. Eli tekstiä tulee siihen vähän väliä.
JTextArea on sijoitettu JScrollPaneen ja siitä on poistettu vaakatasonsuuntainen scrollbar.
Lisään tekstiä tekstitilaan append-metodilla, että vanhat tekstit näkyvät vielä. Aina lisäyksen yhteydessä laitan rivin vaihdon. Aivan kuin jossain chatissa.
eli:
this.text.append("\n"+teksti);
this.vieritys.getVerticalScrollBar().setValue(this.vieritys.getVerticalScrollBar().getMaximum());
No toi jälkimmäinen rivi on se ongelma. Eli pitäis sitten tekstin lisäyksen jälkeen rullata se tekstialue alas että uusi teksti tulee näkyviin, mutta toi mun ratkaisu ei oikein toimi. Yleensä, jostain syystä, vika rivi jää pois näkyvistä. Eli Mikäs ois ratkaisu?
Entäs tuo JScrollBar.setMaximum(int maximum)? Ja mitäkä muuten tuo JScrollPane.updateUI(), täytyykö tuota kutsua? Jos ei niin milloinkas? (en ole tuohon look and feel hommaan oikein perehtynyt)
Yritin itsekin tehdä sitä juuri noin, ja bugitti pahasti. Kunnes valaistuin ja teen sen näin:
textArea.setCaretPosition(textArea.getDocument()
tsuriga: Noi funktiot ei auta. Muistaakseni se setMaximum vaan asettaa vierityspalkin maksimiarvon ja sitä toista käytetään kai silloin, kun ulkonäköä (eli onko Metal, Motif jne) vaihdetaan. En ole varma, en muista enää ihan tarkkaan enkä jaksa nyt perehtyä APIin.
Jeps itsekin rupesin vääntämään notepadin kaltaista hommelia, muuten toimiva jo, mutta scrollbari puuttuu ja ohjelma lagittaa aivan käsittämättömästi jos on tekstiä sanotaan nyt vaikka 20 riviä. Ja textArea vilkkuu kokoa vaihtaessa, ei auta setDoubleBuffered(true). Tietääkös joku miten framen saa vaihtamaan kokoa VASTA kun koon muuttelu lopetetaan (hiiren namikasta päästetään irti)? Sunin Java-sivuilta löytynee kyllä varmaan sekin.
Noen tehnyt sitä ihan noin vaan löysin toisenlaisen ratkaisun Sunin Java foorumeilta.
Kikka oli lisätä tällainen koodiin:
System.setProperty("sun.awt.noerasebackground", "true");
Välillä kun otin ComponentListenerin pois niin tuntui, että piirto näytti taas rumalta, joten laitoin sen takaisin ja hyvin toimii. En ole varma tarvitaanko sitä oikeasti.
Kiitos, Marja, kun laitoit valmiiksi funktion tuohon niin ei tarvinnu APIa avata :). Nyt JScrollPanekin toimii oikein, ainut ongelma on enää minimikoon asetus. Asetin sen JScrollPanelle, mutta se ei toimi. JTextArealla sen asetettaessa ScrollPane ei toimi oikein. JFramellekaan sen (setMinimum(int,int) siis) asettaminen ei toiminut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.