problem mit repaint()-Methode[gelöst]

Status
Nicht offen für weitere Antworten.

mildi

Mitglied
Hi leute ich hab da ein problem mit der repaint() Methode...es wird aus irgendeinem Grund nicht ausgeführt und ich weis nicht warum. Ich hoffe jemand kann mir helfen. Ich sitze da schon zwei tage drann und weis nicht woran es liegt.

bei dem Programm handelt es sich um eine Ampelsteuerung. Ich stell die klassen betreit in denn das ablaufen sollte. die eine beinhaltet eine Threatklasse wo die repaint ausgeführt werden soll. und die paint klasse.

Ich hoffe jemand sieht meinen Fehler.

Klasse Ablauf wo die repaint() aufgefrufen wird.
Code:
/*
 * @(#)thread.java
 *
 *
 * @author 
 * @version 1.00 2008/5/15
 */
package src;
import java.awt.*;
public class Ablauf extends Canvas implements Runnable 
{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Thread thread;
	boolean blink;



	boolean stopthread = false;
	public String Betriebsart;
	
	Amp_draw_RED red = new Amp_draw_RED();
	Amp_draw_YELLOW yel = new Amp_draw_YELLOW();
	Amp_draw_GREEN green = new Amp_draw_GREEN();
	
	public Ablauf () 
		{
			
			blink = false;
			thread = null;
		}
	public boolean retblk()
		{
		
			return blink;
		}
	public void setBetrArt(String art)
		{
			Betriebsart = art;
			System.out.println(Betriebsart);
						
		}
		
	public String Bt()
	{
		
		return Betriebsart;
	}
	
	
	public void start(String art)
		 {	
		 			
		 Betriebsart = art;		
			if (thread == null) 
				{
				
					 thread = new Thread(this, "hasu");
			 	     thread.start();
			 	}
		}
	
	public void run() 
		{
			
			if(Betriebsart == "Reset")
			{
				while (thread != null) 
					{
						if (stopthread)
						return;	
						yel.setBetreiabsart(Betriebsart);																
		   				 yel.repaint();	// ruft paint() auf
		   				 System.out.print("run()."+Betriebsart);
		   				try 
		    			{
		    				Thread.sleep(1000);	// 1s warten
		    			}
		   					 catch (InterruptedException e) {}
					}
			}
		}
	
				
	public void stop() // wird autom. erst nach Programmende aufgerufen
		{	
			stopthread = true;
			thread = null;
		}


}

und die klasse Amp_draw_Yellow wo die paint()-Methode definiert ist.

Code:
/**
 * @(#)Amp_draw_YELLOW.java
 *
 *
 * @author 
 * @version 1.00 2008/5/13
 */
package src;
import java.awt.*;

class Amp_draw_YELLOW extends Canvas 
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	String Betriebsart = "Start";
	
	Ablauf thr1; 
	boolean blink;
	boolean  bli;
	
	
  	
  	public void paint (Graphics g) 
  	{
  		System.out.println("paint");
  		
  		g.setColor(Color.BLACK);
	   	g.fillRect(0,0,100,100);
	   	g.setColor(Color.GRAY);
		
	    
	   	
	   	if(Betriebsart=="Start")
	   	{				
	   		System.out.println("paint.start");				   
	   	  	g.setColor(Color.GRAY);
	      	
	   	}
	   if(Betriebsart=="Reset")
	   
	    {
	    			System.out.println("paint.reset");
	    			thr1 = new Ablauf();	
	   	  		    
   					blink = !thr1.retblk();
   					 System.out.print(blink);
   					 
  						if (blink)
  						{ 						
  							
							g.setColor (Color.GRAY);
						 }	
						else
						{
								g.setColor (Color.YELLOW);
							
						}
	    }
	   g.fillArc (0,0,100,100,0,360);
				

   }
   public void setBetreiabsart(String art)
   {
   		Betriebsart = art;
   		System.out.println(Betriebsart+"  test ");	
   }
 
}



MfG mildi[/code]
 
Es kommt nichts in der Konsolen... Das programm läuft normal ohne Fehlermeldungen aber ohne das die paint()-Methode erneute aufgerufen wird.

MfG mildi
 
Bist du sicher, dass yel überhaupt auf der Oberfläche hinzugefügt wurde? Etwa so :
Code:
       Ablauf a = new Ablauf();
        Frame f = new Frame();
        f.add(a.yel);//<--------------------------------
        f.setVisible(true);
        a.start("Reset");
 
ja hab noch ne klasse Amp_gui...wo alles sichtbar gemacht wird
Code:
/**
 * @(#)Amp_gui.java
 *
 *
 * @author 
 * @version 1.00 2008/5/13
 */

package src;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class Amp_gui extends JFrame implements ItemListener, ActionListener
{


	
	private static final long serialVersionUID = 1L;
	private	JLabel	label_betrart;
	private	JLabel	label_zeit;
	private	JLabel	label_zwischeZu;
	private	JLabel	label_redGreen;
	private	JLabel	label_kuezelS1;	
	private	JLabel	label_kuezelS2;
	private JLabel	label_leer;
	private  JRadioButton	radioButton_manu;	
	private  JRadioButton	radioButton_auto;	
	private	JButton	button_Reset;
	private	JButton	button_Start;	
	private	JButton	button_Single;	
	private JPanel flaeche_oben;

	private JTextField textF1;	 
	private JTextField textF2;
	private Amp_draw_RED blinkRed;
	private Amp_draw_YELLOW blinkYellow;
	
	private Amp_draw_GREEN blinkGreen;
	private Ablauf startThr;

		
		
		
    public Amp_gui(String name) 
    {
    		super (name);
    	
    //		
    // erzeugen der Bedienelemente
    //		
    	label_betrart = new JLabel("Betriebsart");
		label_zeit =	new JLabel("Zeiten");
		label_redGreen = new JLabel("Rot oder grün: ");
		label_redGreen.setHorizontalTextPosition(0);
		label_zwischeZu = new JLabel("Zwischenzustand: ");
		label_zwischeZu.setHorizontalTextPosition(0);		
		label_kuezelS1 = new JLabel("s");
		label_kuezelS2 = new JLabel("s");
		label_leer = new JLabel();
		radioButton_manu = new JRadioButton("manuell");
		radioButton_auto = new JRadioButton("automatisch");
		ButtonGroup bgroup = new ButtonGroup();
		
		button_Reset = new JButton("Reset (blinken) ");
		button_Start = new JButton("Start (automatisch)");
		button_Single = new JButton("Singel Step ");
		textF1 =new JTextField();
		textF2 =new JTextField();
	
	//Ende 


    //
    //Anfang Standewerte für Fenster festlegen
    //
    		
			 setSize(270,330);
              setLocation(200,300);
          getContentPane().setLayout((new BorderLayout()));
             // setLayout(null);
              addWindowListener(new WindowAdapter() {
	        public void windowClosing(WindowEvent event) {
	        System.exit(0);
	      }
	    });
	    
	    
	    
    //           
    // Anfang  der Bedienoberfläche
    //           
              	flaeche_oben = new JPanel();
               	flaeche_oben.setLayout( null );
               	
           //
           //Oberer Teil der Bedienfläche mit Radiobuttons
               	
              	label_betrart.setBounds(0,0,160,30);
              	flaeche_oben.add(label_betrart);
               	radioButton_manu.setBounds(0,30,160,30);
              	flaeche_oben.add(radioButton_manu);
             	radioButton_auto.setBounds(0,60,160,30);
            	flaeche_oben.add(radioButton_auto);
              	radioButton_manu.addItemListener(this);
              	radioButton_auto.addItemListener(this);
              	radioButton_manu.doClick();
              	bgroup.add(radioButton_manu);
              	bgroup.add(radioButton_auto);
             
              	//addItemListener (ItemListener);
            //
            //Bereich mit den Buttons
              	
   				button_Reset.setBounds(0,90,160,30);
   				button_Reset.addActionListener(this);
   				flaeche_oben.add(button_Reset);
   		  		button_Start.setBounds(0,130,160,30);
   		  		button_Start.addActionListener(this);		
              	flaeche_oben.add(button_Start);
              	button_Single.setBounds(0,170,160,30);
              	button_Single.addActionListener(this);
              	flaeche_oben.add(button_Single);
              	label_leer.setBounds(0,200,160,40);
              	
              	flaeche_oben.add(label_leer);
              	label_zeit.setBounds(0,240,160,20);
              
             //
             //Unterer Teil der Bedienoberfläche mit den Zeitauswahl
              	
              	flaeche_oben.add(label_zeit);
              	label_redGreen.setBounds(0,260,120,20);
   				flaeche_oben.add(label_redGreen);
   				textF1.setBounds(125,260,25,20);
   				flaeche_oben.add(textF1);
   				label_kuezelS1.setBounds(150,260,10,20);
   				flaeche_oben.add(label_kuezelS1);
   				label_zwischeZu.setBounds(0,280,120,20);
   				flaeche_oben.add(label_zwischeZu);
   				textF2.setBounds(125,280,25,20);
   				flaeche_oben.add(textF2);
   				label_kuezelS2.setBounds(150,280,10,20);
   				flaeche_oben.add (label_kuezelS2);
   				
   				
    //
    //Ende  Bedienoberfläche
    //				
    
    //
    //Anfang der Ampelleuchten
    //
  
   				blinkRed = new Amp_draw_RED();
   				blinkYellow = new Amp_draw_YELLOW();
   				
   				blinkGreen = new Amp_draw_GREEN();
   				blinkRed.setBounds(160,0,100,100);
   				blinkYellow.setBounds(160,100,100,100);
   				blinkGreen.setBounds(160,200,100,100); 
   				flaeche_oben.add(blinkRed);
   				flaeche_oben.add(blinkYellow);  	
   				flaeche_oben.add(blinkGreen); 		
   					
   				getContentPane().add(flaeche_oben, BorderLayout.CENTER);			
  
    //
    //Ende der Ampelleuchten
    //
   
    
    
     //
     //Fenster sichtbar machen
     //           
          setVisible(true);
	}
		
		
	//
	// Item listener für die RadioButtons zum aktiviere und deaktiveren der Buttons
	//

				public void itemStateChanged(ItemEvent e) 
					{ 
							
						if (radioButton_manu.isSelected())
							{
								 button_Single.setEnabled(true);
								 button_Start.setEnabled(false);
								 textF1.setEnabled(false);
							 	 textF2.setEnabled(false);
							}
						if (radioButton_auto.isSelected())
							{
								button_Single.setEnabled(false);
								button_Start.setEnabled(true);
								textF1.setEnabled(true);
								textF2.setEnabled(true);
							}	
					}
  	// Eende ItemListener
  	
  	
  	//
  	//ActionListner für die Buttons
  	//	
  
  	public void actionPerformed (ActionEvent e)
    	{
    		if(e.getSource() == button_Reset)
    			{
    			startThr = new Ablauf()	;
    			startThr.start("Reset");
    			
    			
    			}
    			if(e.getSource() == button_Start)
    			{
    					startThr = new Ablauf();
    					startThr.setBetrArt("start");
    					System.out.println(startThr.Bt());
    				
    			}
    			if(e.getSource() == button_Single)
    			{
    				
    			}
    		
    	}
    
}
 
mildi hat gesagt.:
Ich versteh nicht wie und warum ich yel aus der class ablauf zum frame adden soll?
Wegen
yel.repaint(); // ruft paint() auf
Wie, das hab ich ja schon gezeigt:
f.add(a.yel);//<--------------------------------
Oder so:
f.add(a.getYel());//<----- mit Getter
 
Danke für die Hilfe...es geht jetzt.
Dafür hab ich jetzt ein weiters Problem..Werde aber neuen threat aufmachen ;-)

MfG mildi
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben