Frage zu JDialog

Alex_winf01

Top Contributor
Hallo liebe Forengemeinde,

folgender JDialog liegt vor:

Java:
boolean a = true;
boolean b = true;
boolean c = true;
String fehlerText[] = new String[33];
String derText = "";
if (!textfeld1.getText().matches("[A-Za-z0-9ÄäÖöÜÜüß\\.,:°§$%\"<>!&\\(\\)?\\/´`+\\*\\-=_']*"))
{
       fehlerText[0] = "<html><p>- Seite 1 Feld \"Textfeld1\"</html>";
	a = false;
}
if (!textfeld2.getText().matches("[A-Za-z0-9ÄäÖöÜÜüß\\.,:°§$%\"<>!&\\(\\)?\\/´`+\\*\\-=_']*"))
{
       fehlerText[1] = "<html><p>- Seite 1 Feld \"Textfeld2\"</html>";
	b = false;
}
if (!textfeld1.getText().matches("[A-Za-z0-9ÄäÖöÜÜüß\\.,:°§$%\"<>!&\\(\\)?\\/´`+\\*\\-=_']*"))
{
       fehlerText[2] = "<html><p>- Seite 1 Feld \"Textfeld3\"</html>";
	c = false;
}

... // weitere Prüfungen

for(int ii = 0; ii < fehlerText.length; ii++)
		 {
			StringBuilder sb = new StringBuilder(); /** sb stellt ein Objekt der Klasse StringBuilder dar **/
			for(String st : fehlerText) 
			{
				if((st != null) && (st.length() > 0))
				{
					sb.append(st);
				}
				derText = sb.toString(); /** derText speichert den Inhalt des Objektes als String **/
			}
		 }
		    
		 if(a == true && b == true && c == true )
		 {
		 	text_prüf = true; // wird wo anders noch verwendet
		 }
		  else
		  {
		  		text_prüf = false; // wird woanders noch verwendet
		  		final JDialog diag = new JDialog(); 	
		  		JButton ok = new JButton("OK"); 		
		  		JButton dru = new JButton("Drucken");	
		  		JPanel hilfspanel = new JPanel(new FlowLayout()); 
		  		JLabel infotext = new JLabel("<html>Mein Text:<p>" + derText + "<p>Weiterer Text.</html>"); 
		  		ok.setPreferredSize(new Dimension(100, 100));
		  		dru.setPreferredSize(new Dimension(100, 100));
		  		hilfspanel.add(ok);
		  		hilfspanel.add(dru);
		  		diag.setLayout(new GridLayout(2,0,10,10));
		  		diag.setSize(400, 1000);
		  		diag.setLocation(300, 300);
		  		diag.setVisible(true);
		  		diag.add(infotext);
		  		diag.add(hilfspanel);
		  		
		  		ok.addActionListener(new ActionListener()
		  		{
		  			public void actionPerformed(ActionEvent e)
		  			{
		  				diag.dispose();
		  			}
		  		});
		  		dru.addActionListener(new ActionListener()
		  		{
		  			public void actionPerformed(ActionEvent e)
		  			{
		  				pj = PrinterJob.getPrinterJob();
		                try 
		                {
		                    if (pj.printDialog()) 
		                    {
		                        paper = new Paper();
		                        paper.setSize(594.936, 841.536); // Set to A4 size.
		                        paper.setImageableArea(30, 0, 530, 780);//set margins
		                        pageFormat = new PageFormat();
		                        pageFormat.setPaper(paper);
		                        size = diag.getSize();
		                        diag.setSize(size);
		                        formular = new Formular_Dialog(diag);
		                        pj.setPrintable(formular, pageFormat);
		                        pj.print();
		                    }
		                } 
		                catch (PrinterException ex) 
		                {
		                    ex.printStackTrace();
		                }
		  			}
		  		});
		  }

Gebe ich in allen drei Textfeldern etwas falsches ein, wird mir nur der erste angezeigt. Bei anderen Abfragen werden mehrere angezeigt. Aber sobald das erste Textfeld dabei ist (das fehlerText[0], wird mir nur dieses Array-Feld angezeigt.

Was mache ich falsch?
 
Liegt wohl am nicht W3C konformen HTML Code ;-)
</html> kennzeichnet das Ende des HTML Dokuments

Welche Zeichen dürfen den nicht enthalten sein? Vielleicht macht es da eher Sinn auf diese zu prüfen.
Stecke die Textfelder in ein Array, dann kann man diese per Schleife überprüfen.

Sind die vielen booleans wirklich notwendig?
Hier mal eine kleine Optimierung:
Java:
	boolean fehlerVorhanden = false;
	StringBuffer fehlerBuffer = new StringBuffer();
	
	if (!textfeld1.getText().matches("[A-Za-z0-9ÄäÖöÜÜüß\\.,:°§$%\"<>!&\\(\\)?\\/´`+\\*\\-=_']*")) {
		fehlerBuffer.append("Fehler1<p>");
		fehlerVorhanden = true;
	}
	if (!textfeld2.getText().matches("[A-Za-z0-9ÄäÖöÜÜüß\\.,:°§$%\"<>!&\\(\\)?\\/´`+\\*\\-=_']*")) {
		fehlerBuffer.append("Fehler2<p>");
		fehlerVorhanden = true;
	}
	
	... // weitere Prüfungen
	
	if (fehlerVorhanden) {
		final JDialog diag = new JDialog();
		JButton ok = new JButton("OK");
		JButton dru = new JButton("Drucken");
		JPanel hilfspanel = new JPanel(new FlowLayout());
		JLabel infotext = new JLabel("<html>Mein Text:<p>" + fehlerBuffer.toString()
				+ "<p>Weiterer Text.</html>");
	...
 
nachdem mein debugger in eclipse bei der ausführung fast abgestürzt ist, habe ich mal am ende der for-schleife den inhalt der variable derText aufgeben lassen und folgendes erhalten:

<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>
<html><p>- Seite 1 Feld "Textfeld1"</html><html><p>- Seite 1 Feld "Textfeld2"</html><html><p>- Seite 1 Feld "Textfeld3"</html>


klar, dass nach dem ersten </html> abgebrochen wird. um ein brauchbares resultat zu erhalten, brauchst du nur innerhalb der fehlerText 0-2 das <html> und </html> zu entfernen, da bei der ausgabe im jlabel infotext bereits html-tags stehen.
 
Zuletzt bearbeitet:

Zurück
Oben