hilfe! probleme mit meinem programm

  • Themenstarter Themenstarter mordin
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

mordin

Gast
also leute kurz zu meinem programm:

in dem codestück was im anhang ist werden 2 textdateien zeilenweise eingelesen.
zeile für zeile wird mit einander verglichen und bei unterschieden soll die jtextpane die zeilen nummer rot einfärben, wo genau mein problem ist. ich habe das forum schon durchsucht und einen ansatz gefunden nur er tut nicht das was er tun soll. er färbt unterschiedliche zeilen nicht rot ein.
komischer weise wenn ich dateien nehme wo ich weiß das sie einen komplett unterschiedlichen inhalt haben dann färbt er auch jede zeile ein.
ich hoffe ihr könnt mir helfen.

danke schonma Mordin
Code:
public void AusgabeTabelle() {
		   
		   String text1 = "";
		   String text2 = "";
		   String text3 = "";
		   String fileContent1 = "";
	       String fileContent2 = "";
	       
	       StyledDocument doc = ZeilenjTextPane.getStyledDocument();
	     
	       Style style = ZeilenjTextPane.addStyle("Rot", null);
	       StyleConstants.setForeground(style, Color.red);
	       	        	        
	       try
	       {
	           FileInputStream fin1 = new FileInputStream("C:\\Dokumente und Einstellungen\\mleh\\URL1\\" + datei1jTextField.getText() + ".txt");
	           FileInputStream fin2 = new FileInputStream("C:\\Dokumente und Einstellungen\\mleh\\URL2\\" + datei2jTextField.getText() + ".txt");
	           InputStreamReader isr1 = new InputStreamReader(fin1, "UTF-8");
	           InputStreamReader isr2 = new InputStreamReader(fin2, "UTF-8");
	           BufferedReader in1 = new BufferedReader(isr1);
	           BufferedReader in2 = new BufferedReader(isr2);
	           int anzahlzeile = 0;
	           int paragraph = -1;
	           while (((fileContent1 = in1.readLine()) != null) | ((fileContent2 = in2.readLine()) != null))
	           {		               
	        	   anzahlzeile = anzahlzeile + 1;
	        	   paragraph = paragraph + 2;	        	   
            	   ZeilenjTextPane.setText(text1 + anzahlzeile);
            	   text1 = ZeilenjTextPane.getText() + "\n";	            	   
            	   Tabelle1jTextArea.setText(text2 + fileContent1);
            	   text2 = Tabelle1jTextArea.getText() + "\n";
            	   Tabelle2jTextArea.setText(text3 + fileContent2);
	               text3 = Tabelle2jTextArea.getText() + "\n";
	               if (!fileContent1.startsWith(fileContent2) == true)  {	
		               doc.setParagraphAttributes(paragraph, 1, ZeilenjTextPane.getStyle("Rot"), true);
	               } 
	           }	           
	           ZeilenjTextPane.setText(text1 + "\n");
	           Tabelle1jTextArea.setText(text2 + "\n");
	           Tabelle2jTextArea.setText(text3 + "\n");
			   in1.close();
			   in2.close();
	           isr1.close();
	           isr2.close();
	           fin1.close();
	           fin2.close();
	       }
	       catch (Exception e)
	       {
	    	   Tabelle1jTextArea.setText(e.getClass().getName());
	    	   Tabelle1jTextArea.setText(e.getMessage());
	       }   
	   }
 
allgemeiner Tipp: trenne deine Programmlogik weitgehend von GUI-Problemen,

in diesem Programm stellt sich z.B. die Frage, ob der Abschnitt
if (!fileContent1.startsWith(fileContent2) == true) {
doc.setParagraphAttributes(paragraph, 1, ZeilenjTextPane.getStyle("Rot"), true);
}
funktioniert,

und sowas testet man nicht mit einem vielleicht unerwartet reagierenden komischen GUI-Element wie einem JTextPane
sondern ganz banal (aber dafür auch megasicher) mit System.out.println()

füge ganz simple Ausgaben ein:
System.out.println("Zeile 1 ist: "..);
System.out.println("Zeile 2 ist: "..);

System.out.println("Zeile 1 unterscheidet sich von Zeile 2");
oder
System.out.println("Zeile 1 ist gleich Zeile 2");


wenn dir das Programm auf diese Weise erzählt, was es von deinen Dateien hält,
dann kann man weiterüberlegen,


so weißt du bisher überhaupt nichts
 
ok danke für den tipp, allerdings muss ich mich noch korrigieren denn es soll nicht "startswith(..)" heißen
sondern "equals".
ich melde mich nach einem test nochma..
mein problem ist halt auch das es theoretisch funktionieren müsste aber das tut es halt nich und ich kann mir nich vorstellen warum...

Mordin
 
sich das im Kopf vorzustellen ist auch gar nicht so einfach,
könnte ich spontan auch nicht,

eine Form von Programmier-Intelligenz ist, sowas gar nicht zu müssen,
sondern systematisch den Fehler zu finden 😉
 
so bin das ganze jez ma simpel mit system.out durchgegangen
komischer weise funktioniert das inna konsole so wie ich mir das auch gedacht hatte...
nur inna jtextpane halt nich
und da stellt sich mir jetzt die frage warum???? :bahnhof:
trotzdem danke für deinen tipp wär ich jez ma öfter beherzigen

Mordin
 
hab mir paar Beispiel angeschaut
http://www.java2s.com/Code/Java/Swing-JFC/JTextPaneStylesExample1.htm
aber die Semantik von setParagraphAttributes() ist mir wohl zu hoch,

doc.insertString(doc.getLength(), text, style);
scheint bei mir dagegen normal zu funktionieren, vielleicht ist das was für dich

mit etwas Code drumherum aus den Beispielen:
Code:
public class TestGUI
    extends JFrame
{
    public TestGUI()
        throws Exception
    {

        // setLayout(new FlowLayout());
        ausgabeTabelle();

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 400);
        setVisible(true);
    }

    private void ausgabeTabelle()
    {
        StyleContext sc = new StyleContext();
        final DefaultStyledDocument doc = new DefaultStyledDocument(sc);
        JTextPane ZeilenjTextPane = new JTextPane(doc);


        final Style styleRed = ZeilenjTextPane.addStyle("Rot", null);
        StyleConstants.setForeground(styleRed, Color.red);

        final Style styleBlack = ZeilenjTextPane.addStyle("Schwarz", null);
        StyleConstants.setForeground(styleBlack, Color.BLACK);

        try
        {
            SwingUtilities.invokeAndWait(new Runnable()
                {
                    public void run()
                    {
                        try
                        {
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleRed);
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleBlack);
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleRed);
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleBlack);
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleRed);
                            doc.insertString(doc.getLength(), "aaaaaaaaa\n", styleBlack);
                        }
                        catch (BadLocationException e)
                        {
                            e.printStackTrace();
                        }
                    }
                });
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        catch (InvocationTargetException e)
        {
            e.printStackTrace();
        }

        getContentPane().add(new JScrollPane(ZeilenjTextPane));
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben