JApplet komplett neu zeichnen

Status
Nicht offen für weitere Antworten.

MichiM

Bekanntes Mitglied
Hallo,

wie genau stelle ich denn einen JPanel-Inhalt neu dar?
Eigentlich hätte ich das über eine der Zeilen 102-104 des StromkreisApplet erreichen wollen, aber es klappt nicht.
Das funktioniert bei der Darstellung der Grafik im oberen Teil des JSplitPanels, nicht aber im unteren, in dem sich die Eingabeelemente befinden.

Ziel: Wenn der Button "Parallelschaltung einbauen" geklickt wird, soll eben nicht nur die Grafik mit der Parallelschaltung dargestellt, sondern gleichzeitig auch unten noch der Eingabedialog für die Daten der Parallelschaltung ergänzt werden.

Hier der Code:

StromkreisApplet.java:
Code:
	import javax.swing.*; 

	import java.applet.*;
	import java.awt.*;
	import java.awt.event.*;
	import java.net.URL;
	import javax.imageio.ImageIO;
		
	public class StromkreisApplet extends JApplet implements ActionListener
	{
	  Image MyImage;
	  Canvas Grafik;
	  
	  JButton	StromstaerkeButton,
	  			StromstaerkeButton_parallel_I1,
	  			SpannungButton,
	  			SpannungButton_parallel,
	  			WiderstandButton,
	  			WiderstandButton_parallel,
	  			SchalterButton,
	  			parallelSchaltungEinbauButton,
	  			seriellSchaltungZusatzbirneEinbauButton;
	  
	  TextField StromstaerkeEingabe,
	  			StromstaerkeEingabe_parallel_I1,
	  			SpannungEingabe,
	  			SpannungEingabe_parallel,
	  			WiderstandEingabe,
	  			WiderstandEingabe_parallel;
	  
	  JPanel	BasisPanel,
	  			EingabePanel,
	  			EingabePanel4,
	  			EingabePanel5,
	  			EingabePanel6;
	  
	  ImageIcon StromkreisGrafik;

	  URL leitergrafik_nur_seriell_und_geschlossen = StromkreisApplet.class.getResource( "leitergrafik_nur_seriell_und_geschlossen.bmp" );
	  URL leitergrafik_nur_seriell_und_offen = StromkreisApplet.class.getResource( "leitergrafik_nur_seriell_und_offen.bmp" );
	  URL leitergrafik_parallel_und_geschlossen = StromkreisApplet.class.getResource( "leitergrafik_parallel_und_geschlossen.bmp" );
	  URL leitergrafik_parallel_und_offen = StromkreisApplet.class.getResource( "leitergrafik_parallel_und_offen.bmp" );
	  
	  public void actionPerformed ( ActionEvent e )
	  {
		  if ( e.getSource () == StromstaerkeButton )
		  {
			  Stromkreis.setze_I ( new Float ( StromstaerkeEingabe.getText() ).floatValue() );
			  SpannungEingabe.setText ( new Float ( Stromkreis.lies_U() ).toString() );
		  }

		  if ( e.getSource () == SpannungButton )
		  {
			  Stromkreis.setze_U ( new Float ( SpannungEingabe.getText() ).floatValue() );
			  StromstaerkeEingabe.setText ( new Float ( Stromkreis.lies_I() ).toString() );
		  }	

		  if ( e.getSource () == WiderstandButton )
		  {
			  Stromkreis.setze_R ( new Float ( WiderstandEingabe.getText() ).floatValue() );
			  StromstaerkeEingabe.setText ( new Float ( Stromkreis.lies_I() ).toString() );
		  }

		  if ( e.getSource () == SchalterButton )
		  {
			  try 
			  {
				  if ( Stromkreis.geschlossener_Zustand() == true )
				  {
					  
					  SchalterButton.setText ( "<html>Stromkreis
schlie&en</html>" );
					  
					  if ( Stromkreis.parallelSchaltung_eingebaut() == false )
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_nur_seriell_und_offen ) );
					  }
					  else
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_parallel_und_offen ) );
					  }
					  
				  }
				  else
				  {
					  
					  SchalterButton.setText ( "<html>Stromkreis
&ffnen</html>" );
					  
					  if ( Stromkreis.parallelSchaltung_eingebaut() == false )
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_nur_seriell_und_geschlossen ) );
					  }
					  else
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_parallel_und_geschlossen ) );
					  }

				  }
	
				  Stromkreis.Hauptteil_Zustand_in_Gegenteil_versetzen();

				  this.validate(); // alles mal neu zeichnen...
				  BasisPanel.updateUI(); 
				  EingabePanel.updateUI();
				  
			  }
			  catch ( Exception ex )
			  {
			  }

		  }

		  if ( e.getSource () == parallelSchaltungEinbauButton )
		  {
			  
			  try 
			  {
				  if ( Stromkreis.parallelSchaltung_eingebaut() == true )
				  {

					  parallelSchaltungEinbauButton.setText ( "<html>Parallelschaltung
einbauen</html>" );
					  
					  if ( Stromkreis.geschlossener_Zustand() == true )
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_nur_seriell_und_geschlossen ) );
					  }
					  else
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_nur_seriell_und_offen ) );						  
					  }
				  }
				  else
					  
				  {

					  parallelSchaltungEinbauButton.setText ( "<html>Parallelschaltung
ausbauen</html>" );

					  if ( Stromkreis.geschlossener_Zustand() == true )
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_parallel_und_geschlossen ) );
					  }
					  else
					  {
						  StromkreisGrafik.setImage( ImageIO.read ( leitergrafik_parallel_und_offen ) );
					  }

				  }

				  Stromkreis.parallel_Schaltung_Einbauzustand_in_Gegenteil_versetzen();
				  //Stromkreis.parallel_Schaltung_eingebaut = false;
				  this.validate(); // alles mal neu zeichnen...
				  BasisPanel.updateUI(); 
				  
			  }
			  catch ( Exception ex )
			  {
				  	System.out.println ( ex );
			  }

		  }

		  
	  }
	
	  public void init()
	  {

		  setSize ( new Dimension ( 870, 480));
		  	
		  try
		   {
			  	setLayout(new BorderLayout () );
			  	
			  	Container contentPane = getContentPane(); 
			    
			  	BasisPanel = new JPanel();
			    add ( BasisPanel, BorderLayout.CENTER );
			    
			  	//__________________________________________________________
	
			    JPanel EingabePanel1_seriell = new JPanel();
			    EingabePanel1_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
			    
			    Label StromstaerkeLabel = new Label ( "Stromstärke I:" );
			    EingabePanel1_seriell.add ( StromstaerkeLabel );
			    
			  	StromstaerkeEingabe = new TextField ( 3 );
			  	StromstaerkeEingabe.setText ( new Float ( Stromkreis.lies_I() ).toString() );
			  	EingabePanel1_seriell.add ( StromstaerkeEingabe );
			  	
			  	Label StromEinheitLabel = new Label ( " A " );
			  	EingabePanel1_seriell.add ( StromEinheitLabel );
			  	
			  	StromstaerkeButton = new JButton ("setze Stromstärke");
			  	EingabePanel1_seriell.add ( StromstaerkeButton );
			  	
			  	StromstaerkeButton.addActionListener ( this );
	
			  	//__________________________________________________________
	
			    JPanel EingabePanel2_seriell = new JPanel();
			    EingabePanel2_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
			  	
			  	Label SpannungLabel = new Label ( "Spannung U:" );
			  	EingabePanel2_seriell.add ( SpannungLabel );
			  	
			  	SpannungEingabe = new TextField ( 3 );
			  	EingabePanel2_seriell.add ( SpannungEingabe );
			  	SpannungEingabe.setText ( new Float ( Stromkreis.lies_U() ).toString() );
			  	
			  	Label SpannungEinheitLabel = new Label ( " V " );
			  	EingabePanel2_seriell.add ( SpannungEinheitLabel );
			  	
			  	SpannungButton = new JButton ("setze Spannung");
			  	EingabePanel2_seriell.add ( SpannungButton );
			  	
			  	SpannungButton.addActionListener ( this );
	
			  	//__________________________________________________________
	
			    JPanel EingabePanel3_seriell = new JPanel();
			    EingabePanel3_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
			  	
			  	Label WiderstandLabel = new Label ( "Widerstand R:" );
			  	EingabePanel3_seriell.add ( WiderstandLabel );
			  	
			  	WiderstandEingabe = new TextField ( 3 );
			  	EingabePanel3_seriell.add ( WiderstandEingabe );
			  	WiderstandEingabe.setText ( new Float ( Stromkreis.lies_R() ).toString() );
			  	
			  	Label WiderstandEinheitLabel = new Label ( " Ohm " );
			  	EingabePanel3_seriell.add ( WiderstandEinheitLabel );
			  	
			  	WiderstandButton = new JButton ("setze Widerstand");
			  	EingabePanel3_seriell.add ( WiderstandButton );
			  	
			  	WiderstandButton.addActionListener ( this );
	
			  	//__________________________________________________________
			  	
			  	EingabePanel = new JPanel();
			  	EingabePanel.setLayout ( new FlowLayout () );
			  	
			  	JPanel EingabePanel_seriell = new JPanel();
			  	EingabePanel_seriell.setLayout ( new BoxLayout ( EingabePanel_seriell,
							BoxLayout.Y_AXIS ) );
			  	EingabePanel_seriell.add ( EingabePanel1_seriell );
			  	EingabePanel_seriell.add ( EingabePanel2_seriell );
			  	EingabePanel_seriell.add ( EingabePanel3_seriell );
			  	
			  	EingabePanel.add ( EingabePanel_seriell );
			    
			    if  ( Stromkreis.parallelSchaltung_eingebaut() == true )/*||
			    	( Stromkreis.parallelSchaltung_eingebaut() == false ) )*/
			    {
				    JPanel EingabePanel1_parallel = new JPanel();
				    EingabePanel1_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
				    
				    Label StromstaerkeLabel_parallel_I1 = new Label ( "Stromstärke I:" );
				    EingabePanel1_seriell.add ( StromstaerkeLabel_parallel_I1 );
				    
				  	StromstaerkeEingabe_parallel_I1 = new TextField ( 3 );
				  	StromstaerkeEingabe.setText ( new Float ( Stromkreis.lies_I() ).toString() );
				  	EingabePanel1_seriell.add ( StromstaerkeEingabe_parallel_I1 );
				  	
				  	Label StromEinheitLabel_parallel_I1 = new Label ( " A " );
				  	EingabePanel1_seriell.add ( StromEinheitLabel_parallel_I1 );
				  	
				  	StromstaerkeButton_parallel_I1 = new JButton ("setze Stromstärke");
				  	EingabePanel1_seriell.add ( StromstaerkeButton_parallel_I1 );
				  	
				  	StromstaerkeButton.addActionListener ( this );
		
				  	//__________________________________________________________
		
				    JPanel EingabePanel2_parallel = new JPanel();
				    EingabePanel2_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
				  	
				  	Label SpannungLabel_parallel = new Label ( "Spannung U:" );
				  	EingabePanel2_seriell.add ( SpannungLabel_parallel );
				  	
				  	SpannungEingabe_parallel = new TextField ( 3 );
				  	EingabePanel2_seriell.add ( SpannungEingabe_parallel );
				  	SpannungEingabe_parallel.setText ( new Float ( Stromkreis.lies_U() ).toString() );
				  	
				  	Label SpannungEinheitLabel_parallel = new Label ( " V " );
				  	EingabePanel2_seriell.add ( SpannungEinheitLabel_parallel );
				  	
				  	SpannungButton_parallel = new JButton ("setze Spannung");
				  	EingabePanel2_seriell.add ( SpannungButton_parallel );
				  	
				  	SpannungButton_parallel.addActionListener ( this );
		
				  	//__________________________________________________________
		
				    JPanel EingabePanel3_parallel = new JPanel();
				    EingabePanel3_seriell.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
				  	
				  	Label WiderstandLabel_parallel = new Label ( "Widerstand R:" );
				  	EingabePanel3_seriell.add ( WiderstandLabel );
				  	
				  	WiderstandEingabe_parallel = new TextField ( 3 );
				  	EingabePanel3_seriell.add ( WiderstandEingabe_parallel );
				  	WiderstandEingabe_parallel.setText ( new Float ( Stromkreis.lies_R() ).toString() );
				  	
				  	Label WiderstandEinheitLabel_parallel = new Label ( " Ohm " );
				  	EingabePanel3_seriell.add ( WiderstandEinheitLabel );
				  	
				  	WiderstandButton_parallel = new JButton ("setze Widerstand");
				  	EingabePanel3_seriell.add ( WiderstandButton_parallel );
				  	
				  	WiderstandButton_parallel.addActionListener ( this );
			    	
			    	JPanel EingabePanel_parallel = new JPanel();
				  	EingabePanel_parallel.setLayout ( new BoxLayout ( EingabePanel_parallel,
							BoxLayout.Y_AXIS ) );
				  	EingabePanel_parallel.add ( EingabePanel1_parallel );
				  	EingabePanel_parallel.add ( EingabePanel2_parallel );
				  	EingabePanel_parallel.add ( EingabePanel3_parallel );
				  	
				    EingabePanel.add ( EingabePanel_parallel );

			    }
			    
			    EingabePanel4 = new JPanel();
			    EingabePanel4.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
			  	SchalterButton = new JButton ("<html>Stromkreis
&ffnen</html>");
			  	SchalterButton.addActionListener ( this );
			  	EingabePanel4.add ( SchalterButton );
			  	add ( SchalterButton/*EingabePanel4*/, BorderLayout.WEST );

			    EingabePanel5 = new JPanel();
			    EingabePanel5.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
			  	parallelSchaltungEinbauButton = new JButton ("<html>Parallelschaltung
einbauen</html>");
			  	parallelSchaltungEinbauButton.addActionListener ( this );
			  	EingabePanel5.add ( parallelSchaltungEinbauButton );
			  	add ( parallelSchaltungEinbauButton, BorderLayout.EAST );
			  	
			  	EingabePanel6 = new JPanel();
			    EingabePanel6.setLayout ( new FlowLayout ( FlowLayout.LEFT, 0, 0 ) );
			  	seriellSchaltungZusatzbirneEinbauButton = new JButton ("<html>Zusatzbirne in Seriellschaltung einbauen</html>");
			  	seriellSchaltungZusatzbirneEinbauButton.addActionListener ( this );
			  	EingabePanel6.add ( seriellSchaltungZusatzbirneEinbauButton );
			  	add ( seriellSchaltungZusatzbirneEinbauButton, BorderLayout.NORTH );

			  	StromkreisGrafik = new ImageIcon ( ImageIO.read ( leitergrafik_nur_seriell_und_geschlossen ) );
			  	JSplitPane splitPane = new JSplitPane
			  	(
			    	     JSplitPane.VERTICAL_SPLIT,
			    	     new JLabel ( StromkreisGrafik ),
			    	     EingabePanel
			     );
			    	  
			  	splitPane.setOneTouchExpandable ( true );
			  	BasisPanel.add(splitPane);
			  	
			    this.setVisible ( true );

		   }
		
		  catch ( Exception e )
		  {
		  }
		  
		}
	  
	}


Stromkreis.java:
Code:
import javax.swing.JButton;

public class Stromkreis
{
	private static boolean geschlossen = true;
	public static boolean parallel_Schaltung_eingebaut = false;
	
	private static float I = 0.25f;
	private static float U = 12;
	private static float R = U / I;
	
	public static float lies_I()
	{
		return I;
	}

	public static float lies_U()
	{
		return U;
	}
	
	public static float lies_R()
	{
		return R;
	}
	

	public static void setze_I ( float I )
	{
		Stromkreis.I = I;
		Stromkreis.U = Stromkreis.R / Stromkreis.I;
		//berechne_U();
	}

	public static void setze_U ( float U )
	{
		Stromkreis.U = U;
		Stromkreis.I = Stromkreis.R / Stromkreis.U;
		//berechne_I();
	}
	
	public static void setze_R ( float R )
	{
		Stromkreis.R = R;
		Stromkreis.I = Stromkreis.U / Stromkreis.R;
		//berechne_I();
	}
	
	private static void berechne_I ()
	{
		Stromkreis.I = Stromkreis.U / Stromkreis.R;
	}	

	private static void berechne_U ()
	{
		//Stromkreis.U = 3;
		Stromkreis.U = Stromkreis.R * Stromkreis.I;
	}	
	
	private static void berechne_R ()
	{
		Stromkreis.R = Stromkreis.U / Stromkreis.I;
	}
	
	public static boolean geschlossener_Zustand ()
	{
		return Stromkreis.geschlossen;
	}
	
	public static void Hauptteil_Zustand_in_Gegenteil_versetzen ()
	{
		if ( Stromkreis.geschlossen == true )
		{
			Stromkreis.geschlossen = false;
		}
		else
		{
			Stromkreis.geschlossen = true;
		}
	}
	
	private void Hauptteil_schliessen ()
	{
		geschlossen = true;
	}
	
	public static boolean parallelSchaltung_eingebaut()
	{
		return Stromkreis.parallel_Schaltung_eingebaut;
	}
	
	public static void parallel_Schaltung_Einbauzustand_in_Gegenteil_versetzen()
	{
		if ( Stromkreis.parallel_Schaltung_eingebaut == true )
		{
			Stromkreis.parallel_Schaltung_eingebaut = false;
		}
		else
		{
			Stromkreis.parallel_Schaltung_eingebaut = true;
		}
	}
	
}

Gruß Michi
 

dieta

Top Contributor
probier's mal mit this.repaint()... Wenn du das in deiner StromkreisApplet-Klasse ausführst, müsste es funktionieren
 

MichiM

Bekanntes Mitglied
Hallo,

der Fehler resultierte einfach aus meiner Fehlannahme, dass beim Neuzeichnen die Methode init() neu aufgerufen wird.
So hab ich nun also jegliche Änderungen, die beim Neuzeichnen berücksichtigt werden sollen, in die Methode actionPerformed() aufgenommen und es klappt. Zumindest das. ;)



Was allerdings immer noch Probleme macht, ist der Cache und zwar in beiden Browsern, in denen ich teste - Firefox und IE. Nun verwende ich ja bereits ein JAR für alle möglichen Ressourcen und klicke obendrein noch immer fleißig "reload", aber wenn so ein JApplet erstmal geladen wurde, ist es eben drin im Cache und wird scheinbar erst bei einem Zugriff,
der etwa einen Tag später (scheinbar wird wirklich die Zeit abgefragt?) stattfindet, neu geladen. Auch das Löschen des Cache hilft nicht weiter...

Gibt es denn keine Möglichkeit, so ein Applet gezielt ausm Cache zu schmeißen?

Gruß Michi
 

L-ectron-X

Gesperrter Benutzer
Ich glaube nicht,dass es per Java-Code geht, ein Applet hat keine Rechte den Browser zu steuern, oder auf irgendeine Art und Weise auf Dateiebene rumzuwerkeln.
Du kannst aber den Browsern sagen, dass sie den Cache beim Schließen des Browsers löschen sollen.
Außerdem kann es sinnvoll sein, den Cache so klein wie möglich zu halten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JApplet in Browserfenster maximieren Tools - Maven, Gradle, Ant & mehr 10
A JApplet Form: JPanel dynamisch füllen Tools - Maven, Gradle, Ant & mehr 3
P JApplet mit Look&Feel? Tools - Maven, Gradle, Ant & mehr 8
S Probleme mit Kombination Java JApplet;MySQL;Webserver Tools - Maven, Gradle, Ant & mehr 3
M Probleme mit JApplet Tools - Maven, Gradle, Ant & mehr 20
G JApplet mit Chat Tools - Maven, Gradle, Ant & mehr 2
C JApplet soll beim Aufruf nicht neustarten Tools - Maven, Gradle, Ant & mehr 3
H JApplet von laufendem JApplet starten Tools - Maven, Gradle, Ant & mehr 8
G JApplet parallel zu Java-Applikation entwickeln Tools - Maven, Gradle, Ant & mehr 11
H JApplet läuft zwar korrekt, bleibt aber unsichtbar Tools - Maven, Gradle, Ant & mehr 3
M JApplet funktioniert nicht Tools - Maven, Gradle, Ant & mehr 5
G Problem mit JApplet bzw Applet Tools - Maven, Gradle, Ant & mehr 5
S aus einem JApplet ein Image in separatem JFrame anzeigen Tools - Maven, Gradle, Ant & mehr 10
N Jars in JApplet Tools - Maven, Gradle, Ant & mehr 2
M Unterschiede-Vorteile Applet/JApplet Tools - Maven, Gradle, Ant & mehr 3
D Runnable JApplet mit Bild/Ovals "übermalt" Buttons Tools - Maven, Gradle, Ant & mehr 6
A Tastatureingaben und JApplet Tools - Maven, Gradle, Ant & mehr 2
M eine Frage über JApplet und JMenuBar Tools - Maven, Gradle, Ant & mehr 6
D JApplet & MouseListener Tools - Maven, Gradle, Ant & mehr 5
L Applet oder JApplet Tools - Maven, Gradle, Ant & mehr 10
M JApplet läuft in Eclipse, aber nicht in den Browsern Tools - Maven, Gradle, Ant & mehr 7
S JApplet- Komponentenanzeige Tools - Maven, Gradle, Ant & mehr 7
M ein aus einem JApplet gestartetes JFrame schliessen Tools - Maven, Gradle, Ant & mehr 6
A [GUI] [JApplet] [JDialog] Nochmal die Frage zur Modalität un Tools - Maven, Gradle, Ant & mehr 3
K Bild (jpg) in einem JApplet Tools - Maven, Gradle, Ant & mehr 2
D JApplet Tools - Maven, Gradle, Ant & mehr 11
Hijo2006 Eclipseprojekt komplett verschieben Tools - Maven, Gradle, Ant & mehr 3
S Sound/Midi Dateien erst komplett laden Tools - Maven, Gradle, Ant & mehr 12
A offscreen Zeichnen Tools - Maven, Gradle, Ant & mehr 19
L table mit dynamische Werte in Aplet zeichnen Tools - Maven, Gradle, Ant & mehr 3
F Menüpunkt in Applet klicken und Panel neu zeichnen Tools - Maven, Gradle, Ant & mehr 7
C in ein panel zeichnen Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben