Omet navegació

4.5.- JTextArea

Un JTextArea és com un JTextField però pensat per a contenir textos més grans.

El més habitual és donar-li la grandària en el moment de construir-lo, especificant les files i columnes de què constarà.

val text = JTextArea(10,35)

Conté aquestos mètodes completament equivalents als del JTextField:

  • getText(): torna el contingut del JTextArea.
  • setText(String): modifica el contingut del JTextArea.
  • setEditable(Boolean): marcarà si el es pot conviar el seu contingut o no.

L'única dificultat és si el text és tan gran que no cap en el JTextArea. Aleshores ens vindrien bé unes barres de desplaçament (ScrollBars)

El següent exemple no té ScrollBar, i si el text és molt llarg ens quedaria ocult:

class Finestra : JFrame() {
	val t1 = JTextArea(10,35)
	val eixir = JButton("Eixir")

	init {
		defaultCloseOperation = JFrame.EXIT_ON_CLOSE
		setTitle("Exemple de JTextArea")
		//setSize(400, 300)
		setLayout(BorderLayout(2, 1))
		val panell1 = JPanel(FlowLayout())
		val panell2 = JPanel(FlowLayout())

		add(panell1,BorderLayout.CENTER)
		panell1.add(t1)

		add(panell2,BorderLayout.SOUTH)
		panell2.add(eixir)
		
		pack()

		eixir.addActionListener { System.exit(0) }
	}
}

Però com comentàvem, si el text és massa gran no cabrà i quedarà ocult part del text (i en l'exemple anterior estem a punt).

La solució, com dèiem, és posar un JScrollPane, el qual definim posant-li com a paràmetre el JTextArea (servirien altres components), i és el JScrollPane el que afegirem al panell:

class Finestra : JFrame() {
	val t1 = JTextArea(10,35)
	val eixir = JButton("Eixir")

	init {
		defaultCloseOperation = JFrame.EXIT_ON_CLOSE
		setTitle("Exemple de JTextArea")
		//setSize(400, 300)
		setLayout(BorderLayout(2, 1))
		val panell1 = JPanel(FlowLayout())
		val panell2 = JPanel(FlowLayout())

		add(panell1,BorderLayout.CENTER)
		val scr = JScrollPane(t1);
		panell1.add(scr)

		add(panell2,BorderLayout.SOUTH)
		panell2.add(eixir)
		
		pack()

		eixir.addActionListener { System.exit(0) }
	}
}

I aquest és el resultat ara: