Spezielle komponente aktualisieren

Septura

Mitglied
Hi Programmierer und andere User,
bin jetzt schon ein bisschen am Java basteln, doch bin ich an meine Grenze gestoßen. Hab gegooglet und einige Foren durchsucht, doch weiß ich auch net, nach was ich genau such und wie ich das knapp formuliere.

Ich habe eine JFrame, auf der einige JPanels und andere Komponenten sind. Unter anderem auch ein JLabel, welches als Banner von rechts nach links durchläuft.
Jetzt kommt das Problem. Es gibt andere Komponente, unter anderem eine JPanel und eine JTable, die dauerhaft aktualisiert werden müssen. Dies Passiert unter anderem auch per Mausklick, also kann nicht vorausgesagt werden, wann es geschieht. Doch leider setzt sich das "Banner" dann immer wieder an die Anfangsposition zurück.

zum Aktualisieren hab ich versucht mit den Methoden

Code:
frame.pack();
oder
Code:
panel.updateUI();
zu arbeiten, doch leider zeigen sie beide den selben unerwünschten Nebeneffekt, dass Banner resetet wird, Obwohl es nicht einmal auf der JPanel sitzt, welche durch
Code:
panel.updateUI();
aktualisiert wird.
Dies versteh ich nicht.
bitte um Hilfe.
Gruß
 
Code:
deinKomponent.repaint();
und anschließend noch
Code:
deinKomponent.validate
sollte den entsprechenden Komponenten aktualisieren.
 
hmm sry hatte gedacht, dass damit mein Problem behoben ist, doch stimmt nicht. Aber dies verwirrt mich jetzt noch mehr: das Banner wird weiterhin zurückgesetzt, wenn ich ein JTextArea mit der Methode
Code:
meinArea.setText("Mein Text")
bearbeite. Warum ist das so, und wie kann ich dem vorbeugen.
Vielen Dank
 
Gerne: Hier wird es initialisiert
Java:
JTextArea übersicht = new JTextArea();
übersicht.setFont(font.getFont());
übersicht.setText("Willkommen");
übersicht.setEditable(false);
übersicht.setBackground(new Color(238,238,238));
font ist ein JLabel, dann sieht das Area aus als wäre es ein JLabel, nur mit Zeilemumbund

hier ist die Problemstelle. Wenn das event aufgerufen wird, und sich der Text des Areas ändert(Zeile 17), setzt sich das Banner zurück. Das Banner ist einfach ein Label welches per Thread immer verschoben wird.
Wenn ich zeile 17 bis 23 in ein Kommentar setze, funktioniert es einwandfrei.

Java:
		MouseListener mouse = new MouseListener(){
		    public void mousePressed(MouseEvent e){}
		    public void mouseReleased(MouseEvent e) {}
		    public void mouseEntered(MouseEvent e) {}
		    public void mouseExited(MouseEvent e) {}
			public void mouseClicked(MouseEvent e ){
				try{
				aktuell = Integer.valueOf(e.getComponent().getName())+1;
			    if (e.getClickCount () == 2) {
			    	new SecondFrame(stmt, diese, aktuell, names);
			    	window.setEnabled(false);
				}
			    else if (e.getClickCount () == 1) {
			    	ResultSet rs = stmt.executeQuery("select * from gui_einstiegubung where Kundennummer ="+aktuell);
			    	rs.next();

			    	übersicht.setText("Firma "+rs.getString(2)+
			    					  "\n\n"+rs.getString(3)+" "+rs.getString(4)+" "+rs.getString(5)+
			    					  "\n"+rs.getString(6)+
			    					  "\n"+rs.getString(7)+" "+rs.getString(8)+
			    					  "\n\nTelefon: "+rs.getString(9)+
			    					  "\n\nFAX: "+rs.getString(10)+
			    					  "\n\nMobil: "+rs.getString(11));
			    	int zähler = 0;
			    	while(names.size() > zähler){
						names.get(zähler).setForeground(new Color(51,51,51));
						zähler++;
						}
					names.get(aktuell-1).setForeground(Color.BLUE);
				}
				}catch (SQLException sqlex) {
					textaus.setText(textaus.getText()+"ERROR: Datenbankfehler: " + sqlex.getMessage()+"\n");
				}
				catch (Exception exp) {
					textaus.setText(textaus.getText()+"ERROR: Sonstiger Fehler: " + exp.getMessage()+"\n");
				}
			}
			};
 
Ich kann anhand deines Codes jetzt leider nicht entdecken, wo der repaint(); -fehler liegt, aber Umlaute im Code sollten vermieden werden.

Gruß Vanny
 
das Problem liegt irgendwo bei dem JTextArea. Sobald ich mit der Methode
Code:
area.setText("")
den Text ändere, setzt sich meine Frame zurück, bzw die Position von einem JLabel, welche nur durch einen Thread gesteuert werden kann verändert sich?!?!?
 
so es scheint als habe ich die Lösung gefunden, warum das so ist, kann ich nicht sagen, aber vielleicht ein anderer hier:
Java:
			    else if (e.getClickCount () == 1) {
			    	ResultSet rs = stmt.executeQuery("select * from gui_einstiegubung where Kundennummer ="+aktuell);
			    	rs.next();
			    	subPanel2.remove(uebersicht);
			    	uebersicht.setText("Firma "+rs.getString(2)+
			    					  "\n\n"+rs.getString(3)+" "+rs.getString(4)+" "+rs.getString(5)+
			    					  "\n"+rs.getString(6)+
			    					  "\n"+rs.getString(7)+" "+rs.getString(8)+
			    					  "\n\nTelefon: "+rs.getString(9)+
			    					  "\n\nFAX: "+rs.getString(10)+
			    					  "\n\nMobil: "+rs.getString(11));
					subPanel2.repaint();
					subPanel2.validate();
			    	subPanel2.add(uebersicht);
			    	int zaehler = 0;

so funktioniert es einwandfrei. Habe auch mal versucht anderweitig den Text zu ändern, doch egal wo und mit was (hab auch JLabel versucht) doch geht es nicht.
Gruß
 
Ich vermute mal, dass durch die JTextArea ein repaint(); aufgerufen wird, das auch dein label betrifft und dann dein "Lauftext" erneut startet.
Wenn du dein label nun erstmal entfernst, dann dein repaint(); durchläuft, ist es natürlich nicht betroffen.

Eine Idee wäre es den Text direkt mit drawString(); in ein Panel zu zeichnen, dann könntest du den Lauftext besser kontrollieren, egal wie oft ein repaint(); kommt.

Gruß Vanny
 

Neue Themen


Zurück
Oben