JTextArea on the fly aus anderem Programm befüllen

GGK_01

Bekanntes Mitglied
Hallo,

ich habe folgende Situation:
  • in meinem Programm werden aus einem Vector Daten ausgelesen.
  • Diese Daten sollen in einer JTextArea dargestellt werden.
  • Die JTextArea ist Teil eines neuen Fensters, das im Rahmen des Programmablaufes aufgerufen wird.
Programm Aufruf:
Java:
JFrameTest.main(null);

Problem:
Wie kann ich diese "externe" JTextArea in einem "externen" JFrame von meinem Hauptprogramm zur Laufzeit befüllen?

Beispeil Code:
Main-Programm = JFrameFiller
Java:
import jFrameTest.JFrameTest;


public class JFrameFiller {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrameTest.main(null);
		JFrameTest.textArea.setText("Fülle Mich");
	}

}

JTextArea:
Java:
package jFrameTest;

import java.awt.BorderLayout;

public class JFrameTest extends JFrame {

	private JPanel contentPane;
	public static JTextArea textArea; 

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JFrameTest frame = new JFrameTest();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public JFrameTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new MigLayout("", "[grow]", "[grow]"));
		
		textArea = new JTextArea();
		contentPane.add(textArea, "cell 0 0,grow");
	}

}

Danke für Eure Hilfe.

GGK
 
Zuletzt bearbeitet:
das funktioniert im Moment nur nicht, weil du das JFrame nebenläufig initialisiert,
du könntest mit Thread.sleep() paar sec warten und wärst auf der sicheren Seite,
oder den Zugriff wieder in ein EventQueue.invokeLater() stecken

oder auch zumindest die JTextArea schon direkt statisch anlegen, nicht vollkommen verboten
 
ich habs mit EventQueue.invokeLater() und Thread.sleep(10000) versucht.

Java:
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		
		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				JFrameTest.main(null);
			}
			
		});
		Thread.sleep(10000);
		JFrameTest.textArea.setText("Fülle Mich");
	}


Die JTextArea ist doch bereits statisch???
Java:
public static JTextArea textArea;

Gruß
GGK
 
> ich habs mit EventQueue.invokeLater() und Thread.sleep(10000) versucht.

und? funktioniert nun doch, man muss die 10 sec natürlich auch warten, ist eine heftige Zeitspanne, die oftmals unterschätzt wird,

JFrameTest.main(null); welches invokeLater() aufruft, nochmal mit invokeLater() aufzurufen,
konnte ich freilich nicht meinen, da muss ich wohl genauer werden:
oder den Zugriff wieder in ein EventQueue.invokeLater() stecken
den textArea-Zugriff nach dem main-Aufruf in invokeLater() stecken, wird dann erst nach dem ersten invokeLater() ausgeführt,
also wenn die GUI bereit ist

> Die JTextArea ist doch bereits statisch???

auch hier muss ich also deutlicher werden: die Variable ist statisch, aber du kannst auch direkt ein Objekt befüllen,
eine JTextArea anlegen,
das stört die GUI-Erzeugung nicht, und der Zugriff sollte auch mehr oder weniger problemlos erfolgen:
entweder zeitlich vor der GUI-Erzeugung, dann wird die GUI initial mit dem schon gesetzen Text angezeigt,
oder der TextArea Zugriff kommt später, dann ganz normales Update
 
Ah...danke dir...jetzt klappts...!

Java:
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		JFrameTest.main(null);
		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				JFrameTest.textArea.setText("Fülle Mich");
			}
			
		});
		
		
	}

Danke für deine Untertützung.

Gruß
GGK
 

Zurück
Oben