Java help gezocht

Status
Niet open voor verdere reacties.

jeroenh13

Gebruiker
Lid geworden
18 apr 2010
Berichten
23
Hallo ik ben op school bezig met java.
We moeten hierbij een stoplicht maken, en dat werkt allemaal wel maar ik krijg het niet voor elkaar dat het ook rood, oranje of groen word.

Dit is wat ik heb aan code :
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class StoplichtApplet extends Applet
{
  private Button roodKnop = new Button();
  private Button groenKnop = new Button();
  private Button oranjeKnop = new Button();
  boolean rood;
  boolean oranje;
  boolean groen;

    public void paint(Graphics g){
        Color bruin = new Color(110,75,40);
        g.setColor(bruin);
        g.fillRect(140, 20, 60, 150);
        g.fillRect(160, 150, 20, 80);
        g.setColor(Color.black);
        g.fillOval(150,25,40,40);
        g.fillOval(150,75,40,40);
        g.fillOval(150,125,40,40);
        if (rood)
        {
            g.setColor(Color.red);
            g.fillOval(150, 25, 40, 40);
        }
        if (oranje)
        {
            g.setColor(Color.orange);
            g.fillOval(150, 75, 40, 40);
        }
        if (groen)
        {
            g.setColor(Color.green);
            g.fillOval(150, 125, 40, 40);
        }
    }
    
    
   public void init()
   {
         setLayout(null);
         setSize(400,400);
         roodKnop.setActionCommand("button");
         roodKnop.setLabel("Rood");
         add(roodKnop);
         roodKnop.setBackground(java.awt.Color.red);
         roodKnop.setBounds(12,288,72,42);
         oranjeKnop.setActionCommand("button");
         oranjeKnop.setLabel("Oranje");
         add(oranjeKnop);
         oranjeKnop.setBackground(java.awt.Color.orange);
         oranjeKnop.setBounds(120,288,72,42);
         groenKnop.setActionCommand("button");
         groenKnop.setLabel("Groen");
         add(groenKnop);
         groenKnop.setBackground(java.awt.Color.green);
         groenKnop.setBounds(228,288,72,42);

    }
    
   void roodKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {

      rood = true;
      oranje = false;
      groen = false;
      repaint();

    }
    void oranjeKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {
      rood = false;
      oranje = true;
      groen = false;
      repaint();
    }
    void groenKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {
       rood = false;
       oranje = false;
       groen = true;
       repaint();
    }

}
 
Laatst bewerkt door een moderator:
Het is voor school dus ik ga je niet de oplossing geven, maar een aanwijzing

Volgens mij kun je een button nooit wat laten doen als je geen actionlistener implementeert.

Toen ik dat eenmaal had gedaan werkte de code bij mij wel:thumb:
Dat is dus een manier om het op te lossen...
 
Hmm ik heb van alles geprobeerd, maar ik krijg er geen actionlistener in hoor.

Code:
 public void paint(Graphics g){
        Color bruin = new Color(110,75,40);
        g.setColor(bruin);
        g.fillRect(140, 20, 60, 150);
        g.fillRect(160, 150, 20, 80);
        g.setColor(Color.black);
        g.fillOval(150,25,40,40);
        g.fillOval(150,75,40,40);
        g.fillOval(150,125,40,40);
        if (rood)
        {
            g.setColor(Color.red);
            g.fillOval(150, 25, 40, 40);
        }
        if (oranje)
        {
            g.setColor(Color.orange);
            g.fillOval(150, 75, 40, 40);
        }
        if (groen)
        {
            g.setColor(Color.green);
            g.fillOval(150, 125, 40, 40);
        }
    }

bij deze code moest ik de eventhandlers schrijven zodat het stoplicht werkt, maar ik kom er toch echt niet uit.
 
voeg nu eens aan de regel public class blablabla enz...
Code:
implements ActionListener
toe

En voeg ook eens
Code:
public void actionPerformed(ActionEvent e)
{
      //code die uitgevoerd moet worden als er op een van de buttons is geklikt.
}
 
dan krijg ik deze error :confused:

Code:
Compileer F:\Havo5\Stoplichtmap\StoplichtApplet.java met Java-Compiler
StoplichtApplet.java:5:8: StoplichtApplet is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener
public class StoplichtApplet extends Applet  implements ActionListener
       ^
1 error
 
Code:
void roodKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {

      rood = true;
      oranje = false;
      groen = false;
      repaint();

    }
    void oranjeKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {
      rood = false;
      oranje = true;
      groen = false;
      repaint();
    }
    void groenKnop_ActionPerformed(java.awt.event.ActionEvent event)
    {
       rood = false;
       oranje = false;
       groen = true;
       repaint();
    }
is dan niet meer nodig, die zet je dan allemaal in de actionPerformed
 
hmm oke ik kom er echt niet uit.
Ik heb geen idee hoe dat dan weer in 1 actionperformed ding komt
 
Je kunt het in 1 methode zetten en dan gebruik maken van e.getSource() om uit te vinden welke knop de actie kwam
 
sorry voor de vragen :P

maar ik heb geen idee hoe ik die e.getSource moet gaan toepassen om een knop actie te achterhalen.

Ik heb nog maar basis kennis in java, dus ik weet niet hoe ik dat allemaal zo in die code kan implementeren.
 
Oke ik heb hem werkende
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class StoplichtApplet extends Applet
{

  // Begin variabelen
  boolean rood;
  boolean oranje;
  boolean groen;
  private Button roodKnop = new Button();
  private Button oranjeKnop = new Button();
  private Button groenKnop = new Button();
  // Einde variabelen



    public void paint(Graphics g){
        Color bruin = new Color(110,75,40);
        g.setColor(bruin);
        g.fillRect(140, 20, 60, 150);
        g.fillRect(160, 150, 20, 80);
        g.setColor(Color.black);
        g.fillOval(150,25,40,40);
        g.fillOval(150,75,40,40);
        g.fillOval(150,125,40,40);
        if (rood)
        {
            g.setColor(Color.red);
            g.fillOval(150, 25, 40, 40);
        }
        if (oranje)
        {
            g.setColor(Color.orange);
            g.fillOval(150, 75, 40, 40);
        }
        if (groen)
        {
            g.setColor(Color.green);
            g.fillOval(150, 125, 40, 40);
        }
    }
    
    
   public void init()
   {
     setLayout(null);
     setSize(400,400);
     roodKnop.setBounds(20, 300, 75, 25);
     roodKnop.setBackground(Color.red);
     roodKnop.setLabel("rood");
     add(roodKnop);
     roodKnop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        roodKnop_ActionPerformed(evt);
      }
    });
    
     oranjeKnop.setBounds(120, 300, 75, 25);
     oranjeKnop.setBackground(Color.orange);
     oranjeKnop.setLabel("oranje");
     add(oranjeKnop);
     oranjeKnop.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
         oranjeKnop_ActionPerformed(evt);
       }
     });

     groenKnop.setBounds(220, 300, 75, 25);
     groenKnop.setLabel("groen");
     groenKnop.setBackground(Color.green);
     groenKnop.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
         groenKnop_ActionPerformed(evt);
       }
     });
    add(groenKnop);
    }

  public void roodKnop_ActionPerformed(ActionEvent evt) {
    rood=true;
    groen=false;
    oranje=false;
    repaint();
  }

  public void oranjeKnop_ActionPerformed(ActionEvent evt) {
    rood=false;
    groen=false;
    oranje=true;
    repaint();
  }

  public void groenKnop_ActionPerformed(ActionEvent evt) {
    rood=false;
    groen=true;
    oranje=false;
    repaint();
  }

}

Ik was wat aan het rommelen met opnieuw beginnen en ineens werkte het :D
 
ik weet waarom hij werkt

Code:
 roodKnop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        roodKnop_ActionPerformed(evt);
      }
    });

maar ik zou graag willen weten waarom dat stukje code het laat werken. Want die code heb ik nog nooit in een Applet die ik heb gemaakt gezien.
 
Hier heb je een stukje werkende code die je eens moet bekijken met debug hierdoor zal je snel merken wat je mist. Het is begincode van een oefening op school nog enkele jaren geleden dat ik on ophalen

Code:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.DefaultEditorKit;

/**
 * requirements: 
 * (1) als naam wordt beeindigd met entertoets dan zal - indien
 * niets is ingevuld, een foutboodschap verschijnen focus terug op naam veld -
 * indien wel is ingevuld, een welkomboodschap, naam in hoofdletters focus op
 * eerste paswoordveld 
 * (2) na bevestigen van paswoord zal - indien correct,
 * opnieuw een melding vooraf gegaan door de naam, focus komt op 1ste tekstgebied -
 * indien fout, foutboodschap alle paswoorden worden gewist, focus gaat naar
 * eerst paswoordveld 
 * (3) indien niets is geselecteerd verschijnt foutboodschap
 * in andere geval wordt de tekst in 2de tekstgebied achteraan toegevoegd 
 * (4) eventuele boodschappen (rood = fout,blauw = ok) , dienen gepast te
 * verschijnen en te verdwijnen.
 * 
 */
public class TekstFrame_1 extends JFrame {
	private JPanel pnlName, pnlPas_1, pnlPas_2, pnlData;
	//private JLabel lblMessage;
	private JLabel lblMessage = null;
	private JButton btnCopy;
	private JTextArea areSource, areDest;
	private JTextField txtName;
	private Action copyAction = new DefaultEditorKit.CopyAction();
	private Action pasteAction = new DefaultEditorKit.PasteAction();
	private int minpasLengt=3;//paswoordlengte
	private int minNLengt=1;//naamlengte min 1
	private boolean blnaccess = false;//Default form_access
	private String strtxtnaam = null;
	private String strSelectText = null;
	private JPasswordField txtPas_1, txtPas_2;
	public Color rgb_accept = Color.blue ;//new Color(0, 255, 255);
	public Color rgb_reject = Color.red ;//new Color(255, 0, 0);
	ActionListener N_actionlistener = new ActionListener(){
		public void actionPerformed (ActionEvent e){
			if (is_empty(txtName,txtPas_1,minNLengt)){
			  infoMessage("Uw naam(min " + minNLengt + " char)mag niet leeg zijn.",rgb_reject);
			} else{
			  strtxtnaam= txtName.getText();
			  infoMessage("Welkom "+strtxtnaam.toUpperCase()+" .",rgb_accept);
			}
		}
		
	};

	ActionListener P1_actionlistener = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			form_Access(false);
			if (txtName.getText().isEmpty()){
				N_actionlistener.actionPerformed(e);
			}else{
				if(is_empty(txtPas_1,txtPas_2,minpasLengt)){
					infoMessage("Uw paswoord (min " + minpasLengt + " char) mag niet leeg zijn.",rgb_reject);	
				}else{;
					if(!is_empty(txtPas_2,txtPas_2,minpasLengt)){
						if(is_equals(txtPas_1,txtPas_2)){
							//De_bug("action paswoord1 == paswoord2");// DEBUG
							form_Access(true);
							infoMessage(strtxtnaam.toUpperCase()+" Uw access is ok.",rgb_accept);
							areSource.grabFocus();
						}else{
							infoMessage("Uw paswoorden zijn Niet gelijk.",rgb_reject);
							txtPas_1.setText(null) ;
							txtPas_2.setText(null);
						}
					}
				}				
			}
		}
	};
	ActionListener P2_actionlistener = new ActionListener(){
		public void actionPerformed (ActionEvent e){
			if(is_empty(txtPas_2,txtPas_2,minpasLengt)){
				P1_actionlistener.actionPerformed(e);
				infoMessage("Uw paswoord2(min " + minpasLengt + " char)mag niet leeg zijn",rgb_reject);
			}else{;
				P1_actionlistener.actionPerformed(e);
			}
		}

	};
	/**
	 * copyeren van geslecteerde source tekst naar dest  
	 */
	ActionListener Copy_Alistener = new ActionListener(){
	public void actionPerformed (ActionEvent e){
		strSelectText=areSource.getSelectedText();
		if (strSelectText == null){
			infoMessage("u hebt geen tekst geselecteert ",rgb_reject);
		}else{
				strSelectText=areSource.getSelectedText();
				infoMessage("copy van: Geselecteerde tekst "+strSelectText+" naar rechts2",rgb_accept);
				strSelectText=areDest.getText()+strSelectText;
				areDest.setText(strSelectText);
		}
	}
	};
	/**
	 * Sluitbericht  yes no
	 */
	static WindowAdapter Close_WindowAdapter = new WindowAdapter() {//sluitmessage
		@Override
		public void windowClosing(WindowEvent e)
		 { int answer = JOptionPane.showConfirmDialog(null, "Bent u zeker dat u wil sluiten ?", "sluiten", JOptionPane.YES_NO_OPTION);
		   if (answer == JOptionPane.YES_OPTION) {
		    System.exit(0);
		   } 
		   else if (answer == JOptionPane.NO_OPTION)
		   {
		    return;
		   }
		 }
        };
	public boolean is_Access(){
		return blnaccess;
	}
	private void infoMessage(String Text,Color kleur){
		lblMessage.setText(Text);
		lblMessage.setForeground(kleur);
		repaint();
	}
	public TekstFrame_1(String titel) {
		super(titel);
		buildGUI();
	}
	public static void main(String[] args) {
		TekstFrame_1 aFrame = new TekstFrame_1("Tekstvelden met Java");
		aFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		aFrame.addWindowListener(Close_WindowAdapter);
		aFrame.setLocationRelativeTo(null);
		aFrame.setVisible(true);
	}
	private void buildGUI() {
		FlowLayout flowRight = new FlowLayout(FlowLayout.RIGHT);
		pnlName = new JPanel(flowRight);
		pnlPas_1 = new JPanel(flowRight);
		pnlPas_2 = new JPanel(flowRight);
		pnlData = new JPanel(flowRight);
		txtName = new JTextField(10);
		txtPas_1 = new JPasswordField(10);
		txtPas_2 = new JPasswordField(10);
		areSource = new JTextArea(5, 15);
		areDest = new JTextArea(5, 15);
		
		btnCopy = new JButton(">>");
		lblMessage = new JLabel(" ");
		
		lblMessage.setForeground(Color.BLUE);
		txtPas_1.addActionListener(P1_actionlistener);
		txtPas_2.addActionListener(P2_actionlistener);
		txtName.addActionListener(N_actionlistener);
		pnlName.add(new JLabel("naam: "));
		pnlName.add(txtName);
		pnlPas_1.add(new JLabel("paswoord: "));
		pnlPas_1.add(txtPas_1);
		pnlPas_2.add(new JLabel("bevestig paswoord: "));
		pnlPas_2.add(txtPas_2);
		
		form_Access(blnaccess); //Default access
		form_Debug(false);//standaard waarden invoegen
		
		btnCopy.addActionListener(Copy_Alistener);
		// verzorg titel rond de 2 tekstgebieden areSource en areDest
		// . . .
		// areDest mag niet toegankelijk zijn  voor de gebruiker (niets in te geven)
		//...
		pnlData.add(areSource);
		pnlData.add(btnCopy);
		pnlData.add(areDest);
				Box content = Box.createVerticalBox();
		content.add(pnlName);
		content.add(pnlPas_1);
		content.add(pnlPas_2);
		content.add(pnlData);
		content.add(lblMessage);
		setContentPane(content);
		pack(); 
		}
	/**
	 * access van het form 
	 */
	private void form_Access(boolean access){
		blnaccess = access;
		areDest.setEditable(false);//mag niet bereikbaar zijn 
		areDest.setFocusable(false);//mag niet bereikbaar zijn
		areSource.setEnabled(blnaccess);
		pnlData.setEnabled(blnaccess);
		btnCopy.setEnabled(blnaccess);
		pnlData.setFocusable(blnaccess);
		pnlData.enableInputMethods(blnaccess);
		//txtName.setEnabled(!blnaccess);
		//txtPas_1.setEnabled(!blnaccess);
		//txtPas_1.setEnabled(!blnaccess);
	}
	private void form_Debug(boolean Debug){//debug standaard waarden
		if (Debug){
			txtName.setText("");
			txtPas_1.setText("");
			txtPas_2.setText("");
			lblMessage.setText("berichten aan gebruiker (rood of blauw)");
		}
	}
	/**
	 * vergelijken van tekstvelden
	 */
	private boolean is_equals(JTextField TEXT1,JTextField TEXT2){
		String gettxt1 = TEXT1.getText().trim();
		String gettxt2 = TEXT2.getText().trim();
		return(gettxt2.equals(gettxt1));	
	}
	/**
	 * Kijken of tekstvelden leeg zijn
	 */
	private boolean is_empty(JTextField name,JTextField Focusnext,int minlengt){
		String input = name.getText().trim();
		if (input.isEmpty() || input.length() < minlengt ){	
			name.grabFocus();
			return  true;
		}else{
			Focusnext.grabFocus();
			return  false;
		}
	}
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan