JTextArea flackert

smathedark

Mitglied
Hallo,

ich habe ein Problem mit meiner Gui. Ich benutze eine JTextArea um die Ausgaben anderer Programme in meinem Programm anzuzeigen. Dazu schreibe ich die Ausgaben der anderen Programme in mein Datenmodell und benachrichtige die View das neue Daten vorliegen. Diese führt dann ihre update Methode aus und zeigt auch korrekt die neuen Daten an. Das Problem hierbei ist jetzt das die Textarea sehr unangenehm flackert. Es sieht so aus, als wenn immer erst die Textarea gelöscht wird und dann der neue Text eingefügt.
Hier mal der Code der update Methode.
Code:
@Override
	public void update(Observable arg0, Object arg1) {
		this.setTitle(this.model.getTest().getMtNumber() + " " + this.model.getTest().getTestType());
		Object[] moduleList=this.model.getModuleNameList().toArray();
		this.mainModulList.setListData(moduleList);
		
		if(this.controller.getIsStarted()){
			if(TestExecuterView.this.debugButton!=null){
				if(TestExecuterView.this.debugButton.isEnabled()){
					TestExecuterView.this.debugButton.setEnabled(false);
				}
			}
			String outPut="\n"+this.model.getModuleOutput().getLastLine();
			if(outPut!=null){
				this.mainModulArea.append(outPut);
			}
			this.mainModulList.setSelectedIndex(this.model.getStartedModule());
			Point point = new Point( 0, (int)(mainModulArea.getSize().getHeight()) );
			TestExecuterView.this.mainModulPanel.getViewport().setViewPosition( point );
		}else{
			this.mainModulArea.setText("");
			if(TestExecuterView.this.debugButton!=null){
				if(!TestExecuterView.this.debugButton.isEnabled()){
					TestExecuterView.this.debugButton.setEnabled(true);
				}
			}
		}
		if(this.telnet){
			this.mainTelnetArea.append(this.model.getLastTelnetLine());
			Point point = new Point( 0, (int)(mainTelnetArea.getSize().getHeight()) );
			TestExecuterView.this.mainTelnetScrollPane.getViewport().setViewPosition( point );
		}
	}
Hoffe mir kann jemand helfen, da es so echt auf die Augen geht.

Danke schonmal.
 
Hallo,

hat denn wirklich niemand eine Idee? Ich habe schon vieles ausprobiert um diesen Effekt zu unterdrücken aber es hat alles nichts geholfen. Dieses Problem muss doch auch bei anderen Leuten auftreten.

Gruß

SMA
 
Hallo,

mit Ideen ist das so ne sache !

Der Sinn und Zweck so mancher deiner Code-Zeilen erschliesst sich mir nicht !
Und das geht anderen hier wohl auch so ! Sonst hättest du deine Antwort schon !

Sollange du der TextArea nur mit append() Text hinzufügst dürfte das nicht zum flackern führen !

Kannst du noch ein paar erläuterungen zu deinem Code posten !

Gruß JAdix
 
Hi,
ich konnte das Problem bisher nicht Lösen, daher habe ich mal ein ganz primitives Programm geschrieben um den Effekt dort zu simulieren.
Es scheint wirklich an der Javakomponente oder dem Betriebssystem zu liegen, da auch dieses kleine Programm den
Effekt zeigt.
Dieser Thread erzeugt eine Ausgabe die in der TextArea angezeigt wird.
Code:
public class J extends Thread{
	private View v=null;
	
	 public J(View v){
	
		 this.v=v;
	
		 this.start();
	 }
	
	public void run(){
	
		for(int i=0;i<10000;i++){
			synchronized(this){
				try {
					this.wait(20);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			String s="Teststring "+i+"\n";
	
			v.addOut(s);
		}
	}
}


Dies ist die Klasse die die Annsicht darstellt.
Code:
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;




public class View extends JFrame {
	private JTextArea area=null;
private JScrollPane pane=null;
	public View (){
		this.setBounds(100,100,500 ,500);
		this.area=new JTextArea();
		area.setSize(100, 100);
		pane=new JScrollPane();
		pane.setViewportView(area);
		this.add(this.pane);
		this.setVisible(true);
	}
	
	public void addOut(String out){
		this.area.append(out);
		Point pointArea = new Point( 0, (int)((area.getSize().getHeight()) ));
		this.pane.getViewport().setViewPosition( pointArea );
	}
	
	public static void main(String[] args){
		View v=new View();
	
		J j=new J(v);
	
		//j.run();
		
	}
}

Ich hoffe mir kann jemand sagen, warum dieses Flacken auftritt, denn in diesem Zustand ist es keine Freude sich das Programm anzuschauen.
 
Hallo,
ich habe die Ursache des problems noch immer nicht gefunden doch habe ich abhilfe gefunden. Durch die Verwendung eines JTextPane anstatt der JTextArea ist der Effekt verschwunden.

Gruß

smathedark
 
Zurück