ActionListener problemen

Status
Niet open voor verdere reacties.

Boofer

Nieuwe gebruiker
Lid geworden
27 aug 2008
Berichten
2
Mijn eerste vraag op dit forum.
Ik ben, net als Clemens Schalkw lees ik, bezig met een cursus Software engineer. Helaas loop ik een beetje vast op het moment...

Ik moet een applet schrijven voor een restaurant die communiceert met een mySQL-database waarin de recepten staan. Je kan dingen in de database veranderen door het gebruik van een JButton. Dit is wat ik heb:

Code:
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.*;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;

public class Kreta extends JApplet{
	
	private Connectie con;
	private int menu_id;
	private String naam_gerecht;
	private String prijs;
	private String ingredienten;
	private String recept;
	private JFrame frame;
	private JPanel west;
	private JPanel north;
	private JPanel south;
	private JPanel east;
	private JList overzicht;
	private JTextField n_naam;
	private JTextField n_prijs;
	private JTextField n_gerecht;
	private JTextArea s_recept;
	private JTextArea s_ingredienten;
	
	public int getID(){
		return this.menu_id;
	}
	public void setID(int menu_id){
		this.menu_id = menu_id;
	}
	public String getNaam_Gerecht(){
		return this.naam_gerecht;
	}
	public void setNaam_Gerecht(String naam_gerecht){
		this.naam_gerecht = naam_gerecht;
	}
	public String getPrijs(){
		return this.prijs;
	}
	public void setPrijs(String prijs){
		this.prijs = prijs;
	}
	public String getIngredienten(){
		return this.ingredienten;
	}
	public void setIngredienten(String ingredienten){
		this.ingredienten = ingredienten;
	}
	public String getRecept(){
		return this.recept;
	}
	public void setRecept(String Recept){
		this.recept = recept;
	}
	
	public Kreta(int menu_id, String naam_gerecht, String prijs, String ingredienten, String recept){
		this.menu_id = menu_id;
		this.naam_gerecht = naam_gerecht;
		this.prijs = prijs;
		this.ingredienten = ingredienten;
		this.recept = recept;
	}
	public Kreta(){
		con = new Connectie();
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	// maak knoppen paneel met listeners, knoppen worden onder elkaar gezet met BoxLayout
		west = new JPanel();
		west.setBackground(Color.darkGray);
		west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS));
		JButton newButton = new JButton("Nieuw");
		JButton addButton = new JButton("Voeg toe");
		JButton editButton = new JButton("bewerk");
		JButton delButton = new JButton("wis");
		west.add(newButton);
		west.add(addButton);
		west.add(editButton);
		west.add(delButton);
		newButton.addActionListener(new newListener());
		addButton.addActionListener(new addListener());
		editButton.addActionListener(new editListener());
		delButton.addActionListener(new delListener());
		
	// maak northpanel met 2x textfields
		north = new JPanel();
		n_naam = new JTextField(20);
	// n_naam.setText(menu_id);
		JLabel n_naamlabel = new JLabel("naam");
		n_gerecht = new JTextField(50);
		n_gerecht.setText(naam_gerecht);
		JLabel n_gerechtlabel = new JLabel("naam gerecht");
		n_prijs = new JTextField(6);
		n_prijs.setText(prijs);
		JLabel n_prijslabel = new JLabel("prijs");
		n_naam.add(BorderLayout.NORTH, n_naam);
		n_gerecht.add(BorderLayout.NORTH, n_naamlabel);
		n_prijs.add(BorderLayout.NORTH, n_prijslabel);
		north.add(BorderLayout.NORTH, n_naam);
		north.add(BorderLayout.CENTER, n_gerecht);
		north.add(BorderLayout.SOUTH, n_prijs);
		
	// maak zuidpanel met 2x JTextArea
		south = new JPanel();
		s_recept = new JTextArea(5,5);
		JLabel s_receptLabel = new JLabel("recept");
		JScrollPane receptScroller = new JScrollPane(s_recept);
		s_recept.setLineWrap(true);
		receptScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		receptScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		south.add(receptScroller);
		south.add(BorderLayout.NORTH, s_recept);
		
		s_ingredienten = new JTextArea(10, 20);
		JLabel s_ingredientenLabel = new JLabel("ingredienten");
		JScrollPane ingrScroller = new JScrollPane(s_ingredienten);
		s_ingredienten.setLineWrap(true);
		ingrScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		ingrScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		south.add(ingrScroller);
		south.add(BorderLayout.SOUTH, s_ingredienten);
		
		// Maak een oostpaneel met JList
		east = new JPanel();
		String[]listEntries = {"1", "2", "3"}; // later moet dit van SQL komen?
		overzicht = new JList(listEntries);
		JScrollPane overzichtScroller = new JScrollPane(overzicht);
		overzichtScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		overzichtScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		east.add(overzichtScroller);
		east.add(overzicht);
		
		frame.getContentPane().add(BorderLayout.WEST, west);
		frame.getContentPane().add(BorderLayout.NORTH, north);
		frame.getContentPane().add(BorderLayout.SOUTH, south);
		frame.getContentPane().add(BorderLayout.EAST, east);
		frame.setSize(500, 500);
		frame.setVisible(true);
		
	// eind GUI code
		
		
		
	}
	public void leesAction(int menu_id){
			// met deze methode lees je een kaart door het id op te geven
			try{
				Statement st = con.connection.createStatement();
				String gget;
				gget = "SELECT DISTINCT * FROM mailingregels WHERE (id = \""+ menu_id + "\");";
				
				ResultSet rs = st.executeQuery(gget);
				rs.next();
				this.menu_id = rs.getInt(1);
			// moet int nog omzetten naar String!!
				this.naam_gerecht = rs.getString(2);
				this.prijs = rs.getString(3);
				this.recept = rs.getString(4);
				this.ingredienten = rs.getString(5);
				}catch(Exception ex){
				System.out.println("Kan de gegevens uit de database niet lezen");
				ex.printStackTrace();
			}
			
		}
	
	public void newAction(){
		// creeer een leeg scherm
		
	}
	public void addAction(){
                                // voeg gegevens toe aan database
		}

	public void editAction(){
		try{
			Statement statement = con.connection.createStatement();
			String sset;
			sset = "UPDATE afhaalmenus "+
			"SET menu_id = '" + this.menu_id + "', '"+
			"naam_gerecht = '" + this.naam_gerecht + "', '"+
			"prijs = '" + this.prijs + "', '"+
			"ingredienten = '" + this.ingredienten + "', '"+
			"recept = '"+ this.recept + "', '"+
			" WHERE afhaalmenus.id = "+ this.menu_id;
			
			statement.executeUpdate(sset);
			
		}catch(Exception e){
			System.out.println("edit failed");
		}		
	}
	public void delAction(){
		System.out.println("del");
		}


	public class newListener implements ActionListener{
		public void actionPerformed(ActionEvent ev){
			System.out.println("new");
		}
	}
	public class addListener implements ActionListener{
		public void actionPerformed(ActionEvent ev){
			System.out.println("add");
		}
	}
	public class editListener implements ActionListener{
		public void actionPerformed(ActionEvent ev){
			
		}
	}
	public class delListener implements ActionListener{
		public void actionPerformed(ActionEvent ev){
			
		}
	}

}

Ik weet dat er nog wel wat fouten inzitten, het is nog niet af. Maar dit probleem stoort me zo dat ik niet verder kom:(
Hoe krijg ik de knoppen zover dat ze de mySQL acties uitvoeren?

Ik zou dus graag willen dat de editButton de editAction uitvoerd, maar ik heb echt geen idee hoe! Ik heb geprobeerd om de method in de interne class van de editListener te zetten, maar dan herkent ie de variabelen niet meer. Ik heb het zo geprobeerd als hierboven. Dan herkend hij de variabelen wel, maar hoe moet je hem dan aanroepen vanuit de editListener?

Ik hoop dat het zo duidelijk is en jullie me een beetje kunnen helpen
 
editButton.addActionListener( new ActionListener{
public void actionPerformed( ActionEvent e ){
editAction();
} } );

zoiets? donno rlly doe het ff uit m'n hoofd, k zal wel ff kijken voor je als dit niet werkt
 
Ik heb het antwoord op het probleem al van een ander forum verkregen.

Je moet behalve de aanroep naar this. ook een aanroep naar de main class maken. Dus ipv.: this.menu_id moet het Kreta.this.menu_id zijn! Zie volgende code:

Code:
public class editListener implements ActionListener{
		public void actionPerformed(ActionEvent ev){
			try{
				Statement statement = con.connection.createStatement();
				String sset;
				sset = "UPDATE afhaalmenus "+
				"SET menu_id = '" + Kreta.this.menu_id + "', '"+
				"naam_gerecht = '" + Kreta.this.naam_gerecht + "', '"+
				"prijs = '" + Kreta.this.prijs + "', '"+
				"ingredienten = '" + Kreta.this.ingredienten + "', '"+
				"recept = '"+ Kreta.this.recept + "', '"+
				" WHERE afhaalmenus.id = "+ Kreta.this.menu_id;
				
				statement.executeUpdate(sset);
				
			}catch(Exception e){
				System.out.println("can not edit file");
			}		
			
		}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan