Problem z referencją do JInternalFrame

0

Witam Wszystkich,

Na załączonym kodzie przedstawiam fragment klasy odpowiedzialny za tworzenie wewnętrznych ramek w okienku głównym aplikacji. Metodą "New" tworzone są kolejne "JInternalFrame", które zawierają tylko 1 komponent "JTextArea" - całość dodawana jest do kontenera "JDesktopPane".

Mój problem polega na tym, że nie potrafię dostać się z poziomu innej metody (np. "ChangeFont") do "JTextArea" danego "JInternalFrame"...
Obiekt "com" w metodzie "ChangeFont" zawiera co prawda jakieś komponenty, ale z pewnością nie "JTextArea"...

Czy ktoś wie co robię źle?

Bardzo dziękuje i pozdrawiam,
Piotr.

public void ChangeFont(String font, int size)
{
	this.FontName = font;
	this.FontSize = size;

	for(JInternalFrame frame: Desktop.getAllFrames())
	{
		for(Component com: frame.getComponents())
		{
			//System.out.println(frame.getComponentCount());

			if(com instanceof JTextArea)
			{
				((JTextArea) com).setFont(new Font(this.FontName, 0, this.FontSize));
			}
		}
	}
}

/**
	Metoda tworzaca nową ramkę wewnętrzną
*/
public void New()
{
	// Utworzenie nowej ramki wewnęrznej zraz z jej komponentami
	JInternalFrame frame = new JInternalFrame(StringNewInternalFrame, true, true, true, true);
	JTextArea text = new JTextArea();

	// Konfiguracja parametrów ramki wewnętrznej
	frame.setBounds(this.LocationX, this.LocationY, (SizeX - 200), (SizeY - 200));
	frame.setMinimumSize(new Dimension((SizeX - 300), (SizeY - 300)));
	frame.setVisible(true);
	frame.setName("Frame" + this.Index);

	// Konfiguracja parametrów komponentów ramki wewnętrznej
	text.setFont(new Font(this.FontName, 0, this.FontSize));
	text.setMargin(new Insets(5, 5, 5, 5));
	text.setName("Text" + this.Index);
	text.setText("Text" + this.Index);


	this.Index++;

	// Dodanie komponentów do kontrolki "JInternalFrame"
	frame.add(text);

	// Dodanie ramki wewnętrznej do kontrolki "JDesktopPane"
	Desktop.add(frame);
	// Zaznaczenie dodanej ramki wewnętrznej
	Desktop.selectFrame(false);

	// Przeliczenie położenia następnej nowej ramki wewnętrznej
	this.LocationX = this.LocationY = ((this.LocationX + 25) % 100);
}
0

Zamiast

for(Component com: frame.getComponents()){

Napisz:

Container container = frame.getContentPane();
for (int i = 0; i < container.getComponentCount(); i++) {
Component com = container.getComponent(i);

0

Wielkie dzięki !!

Pozdrawiam,
Piotr.

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