Springen naar inhoud

Extends jtextarea


  • Log in om te kunnen reageren

#1

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 25 januari 2012 - 18:06

Ik wil een JTextArea aanpassen zodat er een aanpasbar tekst en een niet aanpasbare tekst in komt. Indien er geklikt wordt zal de niet aanpasbare tekst gewoon verdwijnen:

package applicationGUI;

import java.awt.Dimension;
import java.awt.event.*;

import javax.swing.JTextArea;

@SuppressWarnings("serial")
public class TextArea2 extends JTextArea {
	protected String textPublic;
	protected String textPrivate;

	public TextArea2() {
		super();
		createFocusMethod();
		textPublic = "";
		textPrivate = "";
		setText(textPublic);
	}

	public TextArea2(int rows, int columns) {
		super(rows, columns);
		createFocusMethod();
		textPublic = "";
		textPrivate = "";
		setText(textPublic);
	}

	public TextArea2(String text, int rows, int columns) {
		super(text, rows, columns);
		textPublic = text;
		textPrivate = "";
		createFocusMethod();
		setText(textPublic + textPrivate);
	}

	public TextArea2(String text) {
		super(text);
		textPublic = text;
		textPrivate = "";
		createFocusMethod();
		setText(textPublic + textPrivate);
	}

	public void setPublicText(String text) {
		textPublic = text;
		setText(textPublic + textPrivate);
	}

	public void setPrivateText(String text) {
		textPrivate = text;
		setText(textPublic + textPrivate);
	}

	@Override
	public Dimension getPreferredSize() {
		return new Dimension(this.getRootPane().getWidth(), this.getRowHeight()
				* this.getLineCount());
	}

	@Override
	public Dimension getMaximumSize() {
		return this.getPreferredSize();
	}

	@Override
	public Dimension getMinimumSize() {
		return new Dimension(this.getRootPane().getWidth(), this.getRowHeight());
	}

	private void createFocusMethod() {
		addFocusListener(new FocusListener() {

			@Override
			public void focusGained(FocusEvent arg0) {
				setText(textPublic);
			}

			@Override
			public void focusLost(FocusEvent arg0) {
				textPublic = getText();
				setText(textPublic + textPrivate);
			}
		});
	}
}

Verborgen inhoud

package applicationGUI;

import javax.swing.*;

import java.awt.*;


public class TestApp extends JFrame  {


	public static void main(String[] args) {
		new TestApp();
	}

	public TestApp() {
		setExtendedState(JFrame.MAXIMIZED_BOTH);
		setMinimumSize(new Dimension(200, 200));
		setLayout(new GridLayout(2,1));
		TextArea2 io1 = new TextArea2();
		io1.setPrivateText("\nNiet aan te passen");
		add(io1);
		TextArea2 io2 = new TextArea2();
		io2.setPrivateText("\nNiet aan te passen");
		io2.setBackground(Color.gray);
		add(io2);
		setVisible(true);
		validate();
	}

}


Nu zal het gebruik van JTextArea.setText(String text) nog problemen opleveren. Kan ik deze methode overriden zodat die text ook in de variabele textPublic zet?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 25 januari 2012 - 18:27

Nu zal het gebruik van JTextArea.setText(String text) nog problemen opleveren. Kan ik deze methode overriden zodat die text ook in de variabele textPublic zet?

Waarom niet?
Ik begrijp overigens niet goed waarom je iedere keer naar de variabelen wil wegschrijven. Ook begrijp ik niet waarom de variabelen protected zijn. Kunnen ze niet beter private zijn, en aangevraagd worden met een getPublicText() ofzo? Op die manier hoef je ze niet up-to-date te houden (wat erg buggevoelig is)...
What it all comes down to, is that I haven't got it all figured out just yet
And I've got one hand in my pocket and the other one is giving the peace sign
-Alanis Morisette-

#3

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 25 januari 2012 - 18:57

Waarom niet?
Ik begrijp overigens niet goed waarom je iedere keer naar de variabelen wil wegschrijven.

Ik moet toch de twee teksten bijhouden aangezien deze onafhankelijk van elkaar kunnen wijzigen. Ik zie nu ineens de oplossing voor mijn vraag: setText overriden geeft enkel problemen aangezien altijd de private tekst dan zou meekomen wat niet wenselijk is. (Overriden kan wel blijkbaar met super.setText() te gebruiken in de nieuwe methoden. Aldus iets nieuws geleerd :) )

Voorlopig zal ik het hier bij houden denk ik.

Veranderd door jhnbk, 25 januari 2012 - 18:58

Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures