Swing repaint() funktioniert nicht

newbie2009

Bekanntes Mitglied
hey leute folgendes problem, hoffe mir kann einer weiter helfen:
Also ich übergebe einen JPanel als Parameter und will daran dann Veränderungen vornehmen, zum Beispiel Hintergrundfarbe ändern.Mit manchen funktionen klappt es auch, aber Hintergrundfarbe oder String zeichnen klappt einfach nicht, er macht einfach nix.


Java:
public class aufzinslistener implements ActionListener{
	static JPanel ausg ;

aufzinslistener(JPanel aus){
		
		ausg=aus;
		
		
		
		
	}


void getWerte(){
		double[]array= new double[3];
		double []erg;
		
	
			
	
		
		
		try{
			array[0]=Double.parseDouble(years.getText());
			array[1]=Double.parseDouble(z.getText());
			array[2]=Double.parseDouble(cash.getText());
			
			mathematik ma = new mathematik();
			erg =ma.aufzins(array[0], array[1], array[2]);
			
			
			
		
			
			
			
		}catch(NumberFormatException e){
			System.out.println("fehler null");
			ausg.setBackground(Color.WHITE);
			ausg.repaint(0);
			ausg.setToolTipText("yeaah");
			
			
			
			
		}
		
	
	}
	
}

Also ich habe zwei Fenster.Ein Main-Fenster und eins für Parameter.
Die Methode getWerte() wird aufgerufen, wenn das zweite Fenster, geschlossen wird.

hat einer eine Ahnung woran es liegen könnte?

mfg newbie
 
Also nachdem man aus deinem Schnipsel nichts erkennen kann würde ich einfach einmal validate probieren
 
entferne static in Zeile 2,
wenn du mehrere Listener hast, dann steht am Ende in der Variable das JPanel des letzten Konstruktor-Aufrufs und alle Listener greifen auf dieses JPanel zu
 
Also nachdem man aus deinem Schnipsel nichts erkennen kann würde ich einfach einmal validate probieren


ja ich dachte das problem wird auch so deutlich 🙂
ist halt bisschen mehr quelltext.


hier die erste klasse wo ich alles aufrufe und zusammenfüge.

Java:
public class financecalculator extends JFrame{
	
	JButton auf= new JButton("Aufzins");
	JButton ab= new JButton("Abzins");
	JButton ewf = new JButton("EWF");
	JButton bwf = new JButton("BWF");
	JTextField display= new JTextField();
	
	
	JPanel ausgabe ;
	JPanel tasten;
	
	
	Container aktuell;
	

	
	
	
	financecalculator(){
		super("$calculate your finance$");
		
		aktuell=getContentPane();
		aktuell.setLayout(new GridLayout(2,2));
		tasten=new JPanel();
		tasten.setLayout(new FlowLayout(FlowLayout.LEFT));
		tasten.add(auf);
		tasten.add(ab);
		tasten.add(ewf);
		tasten.add(bwf);
		tasten.setBackground(new Color(200,230,225));
		
		
		
		ausgabe=new koordinaten();
	
	
		auf.addActionListener(new aufzinslistener(ausgabe));
		
		
	
		
		
	
	
	
	aktuell.add(ausgabe);
		/*display.setSize(200,200);
		display.setBackground(Color.WHITE);
		display.setFocusable(false);
		display.transferFocusBackward();
		display.setHorizontalAlignment(JTextField.RIGHT);
		
		
		display.setText("0");
		
	
		aktuell.add(display);*/
		aktuell.add(tasten);
		
	
		
		this.setSize(300,200);
		this.setResizable(false);

		this.setVisible(true);
		
	}
	
	

	
	
	

}


und hier folgt die zweite wo mit dem übergebenen JPanel gearbeitet wird.

Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class aufzinslistener implements ActionListener{

	JLabel jahre= new JLabel("jahre: ");
	JLabel zinsen=new JLabel("zinsen: ");
	JLabel kapital = new JLabel("endwert:");
	JPanel texte= new JPanel();
	JPanel titel= new JPanel();
	
	 JPanel ausg ;
	
	aufzinslistener(JPanel aus){
		
		ausg=aus;
		
		
		
		
	}
	
	
	aufzinslistener(){
		
	}
	
	
	 JTextField years =new JTextField(7);
	  JTextField z= new JTextField(7);
	  JTextField cash = new JTextField(7);
	  

	
	
	public void actionPerformed(ActionEvent e) {
		JFrame fenster = new JFrame("parameter");
		fenster.addWindowListener(new WindowListener(){

			@Override
			public void windowActivated(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void windowClosed(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void windowClosing(WindowEvent arg0) {
			getWerte();
			}

			@Override
			public void windowDeactivated(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void windowDeiconified(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void windowIconified(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void windowOpened(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
		
			
		});
		
		
		
		fenster.setSize(200, 125);
		fenster.setResizable(false);
		fenster.setLayout(new GridLayout(1,2));
		
		titel.setLayout(new GridLayout(3,1));
		texte.setLayout(new GridLayout(3,1));
		
		titel.add(jahre);
		titel.add(zinsen);
		titel.add(kapital);
		
		
		texte.add(years);
		texte.add(z);
		texte.add(cash);
	
		
		fenster.add(titel);
		fenster.add(texte);
		
	
		
		fenster.setVisible(true);
	}

	
	
	
	void getWerte(){
		double[]array= new double[3];
		double []erg;
		
	
			
	
		
		
		try{
			array[0]=Double.parseDouble(years.getText());
			array[1]=Double.parseDouble(z.getText());
			array[2]=Double.parseDouble(cash.getText());
			
			mathematik ma = new mathematik();
			erg =ma.aufzins(array[0], array[1], array[2]);
			
			
			
		
			
			
			
		}catch(NumberFormatException e){
			System.out.println("fehler null");
			ausg.setBackground(Color.WHITE);
			ausg.repaint(0);
			ausg.validate();
			ausg.setToolTipText("yeaah");
			
			
			
			
		}
		
	
	}
	
}


habe JPanel nun nicht mehr static und mit validate() versucht, funzt immer noch nicht.
 
setOpaque true/ false?
funktioniert es außerhalb eines Listeners,
kläre was da in dem JPanel alles drin ist, wenn sämtliche Flächen von anderen (nicht-durchsichtigen) Komponenten überdeckt werden, dann bringt die Hintergrundfarbe wenig,
 
Es wäre schön wenn du alles hochladen könntest, damit man es ausführen kann. Erleichtert ungemein das Fehlersuchen...
 

Zurück
Oben