TextArea zeigt kein Text an

headnut

Gesperrter Benutzer
Vollgendes Problem:

Ich habe ein Fenster mit Fehlermeldungen die ich anzeigen möchte!

Nur leider sieht man keinen Text in diesem Fenster...

Aufgerufen wird das Fenster mit: Meldungen.geoeffnetFehler(3);

Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;


@SuppressWarnings("serial")
public class Meldungen extends JFrame {
	
	/** Fehlermeldungen */
	final static String FEHLER1 = "Artikelnummer wurde noch nie definiert!\nKontaktieren Sie einen Administrator";
	final static String FEHLER2 = "Excel konnte nicht beschrieben werden,\nbereits geöffnet oder Schreibgeschützt";
	final static String FEHLER3 = "Scanner nicht angeschlossen oder läuft nicht";
	
	/** Meldungen */
	final static String MELDUNG1 = "Daten erfolgreich gespeichert";
	
	final static String UNBEKANNT = "Unbekannter Fehler";
	
	static Meldungen meldung;
	
	private static JTextArea jTmeldungen;
	private JButton jBok;
	
	public Meldungen() {
		super();
		initGUI();
	}
	

	public void initGUI() {
		getContentPane().setLayout(null);
		this.setSize(400, 350);
		{
			jTmeldungen = new JTextArea();
			getContentPane().add(jTmeldungen);
			jTmeldungen.setBounds(5, 8, 380, 165);
			jTmeldungen.setFont(new java.awt.Font("Tahoma",0,16));
			jTmeldungen.setPreferredSize(new java.awt.Dimension(33, 18));
		}
		
		{
			jBok = new JButton();
			getContentPane().add(jBok);
			jBok.setText("OK");
			jBok.setBounds(87, 203, 213, 63);
			jBok.setFont(new java.awt.Font("Tahoma",0,26));
			jBok.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					meldung.setVisible(false); // verschwinden lassen
					meldung.dispose(); // abräumen
				}
			});
		}
	}
	
	public static void meldeFensterOpen(){
		meldung = new Meldungen();
		meldung.setLocation(800,600);
		meldung.setVisible(true);
		meldung.getContentPane().setLayout(null);
	}
	
	// Meldefenster für Fehler
	public static void geoeffnetFehler(int nummer) {
		meldeFensterOpen();

		meldung.setTitle("Fehlermeldung");

		switch (nummer) {
		case 1:
			jTmeldungen.setText(FEHLER1);
			break;
		case 2:
			jTmeldungen.setText(FEHLER2);
			break;
		case 3:	
			jTmeldungen.setText(FEHLER3);
			break;
		default:
			jTmeldungen.setText(UNBEKANNT);
		}	
		
		new Thread() {
			  public void run() {
				  try{ Thread.sleep(10000);
				  }catch (InterruptedException e){ e.printStackTrace();
				  }//catch
				  meldung.setVisible(false);
				 // meldung.dispose();
			  }
		}.start();
	
	}
	
	// Meldefenster für Meldungen
	public static void geoeffnetMeldung(int nummer) {
		meldeFensterOpen();
		meldung.setTitle("Meldung");

		new Thread() {
			  public void run() {
				  try{ Thread.sleep(10000);
				  }catch (InterruptedException e){ e.printStackTrace();
				  }//catch
				  meldung.setVisible(false);
				  //meldung.dispose();
			  	}
			}.start();
		
		
		switch (nummer) {
		case 1:
			jTmeldungen.setText(MELDUNG1);
			break;
		default:
			jTmeldungen.setText(UNBEKANNT);
		}	
	}
}
 
Also bei mir schon.
Du rufst zu früh setVisible(true) auf, mache das mal testweise eine Zeile bevor du den Thread startest (bzw erst nach dem du alles richtig initialisiert/gesetzt hast) rein und nehme es aus der meldeFensterOpen Methode raus!

p.s.: igitt null-layout 😀
 
Hat nichts gebracht...

Das Fenster geht auf nur seh ich kein Text

hängt wohl mit dem anderen Programm das am laufen ist zusammen
 
Falsche Methode aufgerufen? Du solltest mehr auf die Sichtbarkeiten und aussagekräftige Variablen/Methodennamen achten. (PS: EventQuere! Habe ich jetzt der Übersichtlichkeit halber außer im Worker natürlich auch verzichtet.)
Warum machst du es nicht so?

Java:
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;

@SuppressWarnings("serial")
public class Meldungen extends JFrame
{
	private final static String[] FEHLER = {
		"Artikelnummer wurde noch nie definiert!\nKontaktieren Sie einen Administrator",
		"Excel konnte nicht beschrieben werden,\nbereits geöffnet oder Schreibgeschützt",
		"Scanner nicht angeschlossen oder läuft nicht"
	};
	private final static String[] MELDUNG = {
		"Daten erfolgreich gespeichert"
	};
	
	private final static String UNBEKANNT = "Unbekannter Fehler";
	
	private Meldungen(String msg)
	{
		super();
		initGUI(msg);
		
		new SwingWorker<Object, Object>() {
			protected Object doInBackground() throws Exception
			{
				try
				{
					Thread.sleep(10000);
				}
				catch(InterruptedException e) {};
				return(null);
			};
			protected void done()
			{
				setVisible(false);
				dispose();
			}
		}.execute();
	}
	private void initGUI(String msg)
	{
		setLayout(new BorderLayout());
		
		JTextArea jTmeldungen = new JTextArea(msg);
		jTmeldungen.setFont(new Font("Tahoma",0,16));
		jTmeldungen.setEditable(false);
		add(jTmeldungen, BorderLayout.CENTER);
		
		JButton jBok = new JButton("OK");
		jBok.setFont(new Font("Tahoma",0,26));
		jBok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				setVisible(false);
				dispose();
			}
		});
		add(jBok, BorderLayout.SOUTH);
		
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
	public static void geoeffnetFehler(int nummer)
	{
		if(nummer < 0 || nummer > FEHLER.length - 1)
		{
			new Meldungen(UNBEKANNT);
			return;
		}
		new Meldungen(FEHLER[nummer]);
	}
	public static void geoeffnetMeldung(int nummer)
	{
		if(nummer < 0 || nummer > MELDUNG.length - 1)
			throw new IllegalArgumentException();
		new Meldungen(MELDUNG[nummer]);
	}
	public static void main(String[] args)
	{
		geoeffnetFehler(2);
	}
}
 
Ist auch ein ansatz, sicher viel bequemer um zu erweitern

Jedoch wird immer noch kein Text angezeigt, obwohl ich ein neuer Thread aufmache beim aufruf
 
Für derartige Meldungen sollte kein JFrame benutzt werden, sondern ein modaler Dialog wie z.B. ein JDialog oder ein JOptionPane.
 

Zurück
Oben