JTextField -> obsługa zdarzenia (rysowanie)

0

Witam,
Uczę się Javy od tygodni i w tym momencie dotarłęm do obsługi zdarzeń. O ile JButton, KeyEventy i Mouse nie były kłopotliwe to złapałem się na JTextField. Program ma po wpisaniu wymiaru w polu tekstowym rysować odpowiedni kwadrat... ale nie rysuje... Proszę o pomoc ;) To mój pierwszy post, więc proszę o wyrozumiałośc doświadczonych forumowiczów i programistów.

import java.awt.*;
import java.awt.geom.*;

import javax.swing.*;
import javax.swing.event.*;

public class RysujPros {
	public static void main(String[] args) {
		MojaRamka ramka = new MojaRamka();
		ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ramka.show();
	}
}

class MojaRamka extends JFrame {
	public MojaRamka() {
		this.setSize(szer, wys);

		Container zestaw = getContentPane();
		JPanel panelPoleTekstowe = new JPanel();
		JTextField poleTekstowe = new JTextField(5);
		panelPoleTekstowe.add(poleTekstowe);
		zestaw.add(panelPoleTekstowe, BorderLayout.SOUTH);

		DocumentListener sluchacz = new SluchaczPolaTekstowego();
		poleTekstowe.getDocument().addDocumentListener(sluchacz);

		kwadrat = new PanelRysunek();
		zestaw.add(kwadrat, BorderLayout.CENTER);

	}

	public void zmienWymiar() {
		try {
			int wymiar = Integer.parseInt(poleTekstowe.getText().trim());
			kwadrat.zmienWymiary(wymiar);
		} catch (NumberFormatException w) {
		}
	}

	private class SluchaczPolaTekstowego implements DocumentListener {
		public void insertUpdate(DocumentEvent z) {
			zmienWymiar();
		}

		public void removeUpdate(DocumentEvent z) {
			zmienWymiar();
		}

		public void changedUpdate(DocumentEvent z) {
		}
	}

	private PanelRysunek kwadrat;
	private JTextField poleTekstowe;
	
	private int szer = 300;
	private int wys = 150;
}

class PanelRysunek extends JPanel {
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;

		Rectangle2D kw = new Rectangle2D.Double(10, 10, dlugosc, dlugosc);
		g2.draw(kw);
	}
	public void zmienWymiary(int wym)
	{
		dlugosc = wym;
		repaint();
	}
	private double dlugosc;
}
2

Dwie sprawy:

public class Demo {
    public static void main(String[] args) {
        MojaRamka ramka = new MojaRamka();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //ramka.show(); - metoda przestarzała ("deprecated")
        ramka.setVisible(true);
    }
}

...oraz...

public MojaRamka() {
	this.setSize(szer, wys);

	Container zestaw = getContentPane();
	JPanel panelPoleTekstowe = new JPanel();
	//JTextField poleTekstowe = new JTextField(5); 
	// - robisz ze zmiennej globalnej zmienną lokalną i stąd NullPointerException
	// przy podawaniu wartości w polu tekstowym
	poleTekstowe = new JTextField(5);
	panelPoleTekstowe.add(poleTekstowe);
	zestaw.add(panelPoleTekstowe, BorderLayout.SOUTH);

	DocumentListener sluchacz = new SluchaczPolaTekstowego();
	poleTekstowe.getDocument().addDocumentListener(sluchacz);

	kwadrat = new PanelRysunek();
	zestaw.add(kwadrat, BorderLayout.CENTER);
}
0

Wielkie dzięki. Wszystko działa jak należy :)

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