Hello,
Finally I have a working Java Application containing 3 classes: Connection (Connectie), GUI (KretaGUI) and DatabaseActions (Kreta).
Everything works like a charm but now I have to make a JApplet. And that's where the trouble starts. I play around with it but I just can't get it to work. When I get some layoutstuff in the applet the .ini file can't be read (because an applet doesn't allow file operations).
This is driving me crazy. It's just part of an exercise that doesn't even get graded but I want to learn and understand how to make a JApplet.
This is the working code:
Connection class:
//Importeer bibliotheken import java.io.FileInputStream; import java.sql.*; import java.util.Properties; import javax.swing.JOptionPane; // **************************** public class Connectie { // Definieer private variabelen benodigd voor de connectie private String host; private String user; private String password; private String databasenaam; Connection connection; public void displaySQLErrors(Exception e) { String error; error = "SQL foutmelding: " + e.getMessage(); JOptionPane.showMessageDialog(null, error,"foutmelding",JOptionPane.ERROR_MESSAGE); } public Connectie() { // Lees het config.ini bestand in this.LeesIniBestand(); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception e) { String error = "Niet mogelijk om de driver te laden"; JOptionPane.showMessageDialog(null, error,"foutmelding",JOptionPane.ERROR_MESSAGE); System.exit(1); } try { // Bouw de connectiestring op connection = DriverManager.getConnection("jdbc:mysql://" + this.host + "/" + this.databasenaam + "?user=" + this.user + "&password=" + this.password); //String succes = "Er is een connectie met de database"; //JOptionPane.showMessageDialog(null, succes,"succes",JOptionPane.INFORMATION_MESSAGE); } catch(Exception e) { displaySQLErrors(e); } } public void LeesIniBestand() { try{ Properties p = new Properties(); p.load(new FileInputStream("config.ini")); //Het bestand config.ini staat in de root map van java //Vul de database variabelen met de gegevens uit het .ini bestand this.host = p.getProperty("host"); this.user = p.getProperty("user"); this.password = p.getProperty("password"); this.databasenaam = p.getProperty("databasenaam"); //Schrijf variabelen naar scherm ter controle System.out.println("Host = " + p.getProperty("host")); System.out.println("user = " + p.getProperty("user")); System.out.println("Password = " + p.getProperty("password")); System.out.println("databasenaam = " + p.getProperty("databasenaam")); } catch (Exception e) { System.out.println(e); } } }
GUI class:
//Importeer bibliotheken import javax.swing.*; import java.util.Vector; import java.awt.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; // ************************************ public class KretaGUI { // In deze class wordt de GUI en alle events (JButton en JList) opgebouwd JFrame frame; JButton bNieuw; JButton bToevoegen; JButton bBewerken; JButton bWis; JTextField tId; JTextField tNaam_gerecht; JTextField tPrijs; JTextArea tRecept; JTextArea tIngredienten; JLabel lId; JLabel lNaam_gerecht; JLabel lPrijs; JLabel lRecept; JLabel lIngredienten; JList gerechten; public KretaGUI(){ Kreta kreta = new Kreta(); Vector tabel; tabel = kreta.leesAlleGerechten(); frame = new JFrame("Afhaalmenus"); bNieuw = new JButton("Nieuw"); bNieuw.addActionListener(new bNieuwListener()); bToevoegen = new JButton("Toevoegen"); bToevoegen.addActionListener(new bToevoegenListener()); bBewerken = new JButton("Bewerken"); bBewerken.addActionListener(new bBewerkenListener()); bWis = new JButton("Wissen"); bWis.addActionListener(new bWisListener()); tId = new JTextField(3); tId.setEditable(false); // Het veld ID mag niet handmatig worden aangepast tNaam_gerecht = new JTextField(20); tPrijs = new JTextField(20); tRecept = new JTextArea(5,20); tIngredienten = new JTextArea(5,20); lId = new JLabel("Id:"); lNaam_gerecht = new JLabel("Naam:"); lPrijs = new JLabel("Prijs:"); lRecept = new JLabel("Recept:"); lIngredienten = new JLabel("Ingredienten:"); JPanel panelA = new JPanel(new FlowLayout(FlowLayout.LEFT)); //Plaats de buttons boven in het frame links uitgelijnd JPanel panelB = new JPanel(); // Verzamel de textfields en textareas JPanel panelC = new JPanel(); //JList panelB.setLayout(new BoxLayout(panelB, BoxLayout.Y_AXIS)); //Plaats de labels en invoervelden onder elkaar // opmaak JTextArea JScrollPane sRecept = new JScrollPane(tRecept); tRecept.setLineWrap(true); sRecept.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); sRecept.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); JScrollPane sIngredienten = new JScrollPane(tIngredienten); tIngredienten.setLineWrap(true); sIngredienten.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); sIngredienten.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); // *************************** panelA.add(bNieuw); panelA.add(bToevoegen); panelA.add(bBewerken); panelA.add(bWis); panelB.add(lId); panelB.add(tId); panelB.add(lNaam_gerecht); panelB.add(tNaam_gerecht); panelB.add(lPrijs); panelB.add(tPrijs); panelB.add(lRecept); panelB.add(sRecept); panelB.add(lIngredienten); panelB.add(sIngredienten); gerechten = new JList(tabel); gerechten.addListSelectionListener(new LijstListener()); gerechten.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // Er kan maar 1 regel geselecteerd worden in de JList gerechten.setSelectedIndex(-1); // Geen regel is geselecteerd panelC.add(gerechten); frame.getContentPane().add(BorderLayout.NORTH,panelA); frame.getContentPane().add(BorderLayout.WEST,panelB); frame.getContentPane().add(BorderLayout.EAST,panelC); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { KretaGUI afhaal = new KretaGUI(); } class bNieuwListener implements ActionListener{ // Maak alle velden leeg en verwijder de selectie van de JList als er op nieuw wordt geklikt. public void actionPerformed(ActionEvent event){ gerechten.clearSelection(); // Zorg ervoor dat er geen recepten meer geselecteerd zijn tId.setText(""); tNaam_gerecht.setText(""); tPrijs.setText(""); tIngredienten.setText(""); tRecept.setText(""); tNaam_gerecht.requestFocus(); // Zet de focus in het veld naam } } class bBewerkenListener implements ActionListener{ public void actionPerformed(ActionEvent event){ int Geselecteerd; Geselecteerd = gerechten.getSelectedIndex(); // Bewaar de selectedindex van de JList Kreta kreta = new Kreta(); kreta.setNaam_Gerecht(tNaam_gerecht.getText()); kreta.setPrijs(tPrijs.getText()); kreta.setIngredienten(tIngredienten.getText()); kreta.setRecept(tRecept.getText()); kreta.bewerkGerecht(Integer.parseInt(tId.getText())); gerechten.setListData(kreta.leesAlleGerechten()); gerechten.repaint(); gerechten.setSelectedIndex(Geselecteerd); // Selecteer de rij in de JList van het huidige record } } class bToevoegenListener implements ActionListener{ // Voeg het nieuwe gerecht toe aan de database (insert) public void actionPerformed(ActionEvent event){ Kreta kreta = new Kreta(); kreta.setNaam_Gerecht(tNaam_gerecht.getText()); kreta.setPrijs(tPrijs.getText()); kreta.setIngredienten(tIngredienten.getText()); kreta.setRecept(tRecept.getText()); kreta.nieuwGerecht(); // Toon nieuwe menu_id in JTextfield tId tId.setText(kreta.getId() + ""); // Vul de JList gerechten met de nieuwe data gerechten.setListData(kreta.leesAlleGerechten()); gerechten.repaint(); // Indien het nieuwe record aan de tabel is toegevoegd dient de nieuwe regel in de JList geselecteerd te worden int lastIndex = gerechten.getModel().getSize() - 1; if (lastIndex >= 0) { gerechten.setSelectedIndex(lastIndex); } } } // Deze Klasse roept wisRecept aan class bWisListener implements ActionListener{ public void actionPerformed(ActionEvent event){ Kreta kreta = new Kreta(); kreta.wisGerecht(Integer.parseInt(tId.getText())); gerechten.setListData(kreta.leesAlleGerechten()); gerechten.repaint(); gerechten.clearSelection(); // Zorg ervoor dat er geen recepten meer geselecteerd zijn tId.setText(""); tNaam_gerecht.setText(""); tPrijs.setText(""); tIngredienten.setText(""); tRecept.setText(""); tNaam_gerecht.requestFocus(); // Zet de focus in het veld naam ; } } class LijstListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { Kreta kreta = new Kreta(); try { int menu_id = Integer.parseInt(((Vector)gerechten.getSelectedValue()).elementAt(0).toString()); kreta.leesGerecht(menu_id); //tfdMenuID.setText(getmenu_id() + ""); tId.setText(kreta.getId() + ""); tNaam_gerecht.setText(kreta.getNaam_Gerecht()); tPrijs.setText(kreta.getPrijs()); tIngredienten.setText(kreta.getIngredienten()); tRecept.setText(kreta.getRecept()); } catch(Exception ex) { JOptionPane.showMessageDialog(null, ex.getMessage(), "Fout", JOptionPane.ERROR_MESSAGE); } } } } }
Database stuff class:
//Importeer bibliotheken import java.sql.ResultSet; import java.sql.Statement; import java.util.Vector; import java.sql.*; // ********************* public class Kreta { // In deze class worden de database bewerkingen uitgevoerd private Connectie con; private Vector vec; private int menu_id; private String naam_gerecht; private String prijs; private String ingredienten; private String recept; public void setId(int id){ this.menu_id=menu_id; } public int getId(){ return this.menu_id; } public void setNaam_Gerecht(String naam_gerecht){ this.naam_gerecht=naam_gerecht; } public String getNaam_Gerecht(){ return this.naam_gerecht; } public void setPrijs(String prijs){ this.prijs=prijs; } public String getPrijs(){ return this.prijs; } public void setIngredienten(String ingredienten){ this.ingredienten=ingredienten; } public String getIngredienten(){ return this.ingredienten; } public void setRecept(String recept){ this.recept=recept; } public String getRecept(){ return this.recept; } public Kreta(){ con = new Connectie(); vec = new Vector(); } public Kreta(int menu_id,String naam_gerecht,String prijs,String ingredienten,String recept){ this(); this.menu_id = menu_id; this.naam_gerecht = naam_gerecht; this.prijs = prijs; this.ingredienten = ingredienten; this.recept = recept; } public Vector leesAlleGerechten(){ // Maak een vector die alle records uit de tabel afhaalmenus ophaalt. try { Statement statement = con.connection.createStatement(); String gget; gget = "SELECT DISTINCT menu_id,naam_gerecht,prijs FROM afhaalmenus;"; ResultSet rs = statement.executeQuery(gget); while (rs.next()){ Vector vRow = new Vector<>(); for(int x = 1;x <=3;x++){ vRow.addElement(rs.getString(x)); } vec.add(vRow); } } catch (Exception e) { con.displaySQLErrors(e); } return vec; } public void leesGerecht(int id){ // Lees een record met het meegegeven id uit de tabel afhaalmenus try{ PreparedStatement sset = con.connection.prepareStatement("SELECT DISTINCT * FROM afhaalmenus WHERE menu_id = ? "); sset.setInt(1, id); //Eerste parameter '?' is het menu_id welke wordt toegekend in het eerste stuk van de functie. ResultSet rs = sset.executeQuery(); rs.next(); this.menu_id = rs.getInt(1); this.naam_gerecht = rs.getString(2); this.prijs = rs.getString(3); this.ingredienten = rs.getString(4); this.recept = rs.getString(5); }catch(Exception e){ e.printStackTrace(); // Ik maak gebruik van de printstack om meer informatie te verkrijgen bij een exception } } public void wisGerecht(int id){ // Delete het record met het menu_id id uit de tabel afhaalmenus try { PreparedStatement sset = con.connection.prepareStatement("DELETE FROM afhaalmenus WHERE menu_id = ?"); sset.setInt(1, id); //Eerste parameter '?' is het menu_id welke wordt toegekend in het eerste stuk van de functie. sset.executeUpdate(); } catch (Exception e){ e.printStackTrace(); // Ik maak gebruik van de printstack om meer informatie te verkrijgen bij een exception } } public void nieuwGerecht(){ try { // Insert statement opbouwen // Ik maak gebruik van een prepared statement omdat dit veel overzichtelijker werkt // Met Statement.RETURN_GENERATED_KEYS krijg ik de nieuw aangemaakte menu_id terug PreparedStatement sset = con.connection.prepareStatement("INSERT INTO afhaalmenus (naam_gerecht,prijs,ingredienten,recept) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS); sset.setString(1, this.naam_gerecht); //Eerste parameter '?' is het naam_gerecht sset.setString(2, this.prijs); //Tweede parameter '?' is het prijs sset.setString(3, this.ingredienten); //Derde parameter '?' is het ingredienten sset.setString(4, this.recept); //Vierde parameter '?' is het recept sset.executeUpdate(); ResultSet tableKeys = sset.getGeneratedKeys(); tableKeys.next(); this.menu_id = tableKeys.getInt(1); } catch (Exception e){ e.printStackTrace(); // Ik maak gebruik van de printstack om meer informatie te verkrijgen bij een exception } } public void bewerkGerecht(int id) { // Update het geselecteerde record in de tabel afhaalmenus try { PreparedStatement sset = con.connection.prepareStatement("UPDATE afhaalmenus SET naam_gerecht = ?,prijs = ?,ingredienten = ?,recept = ? " + "WHERE menu_id = ?"); sset.setString(1, this.naam_gerecht); sset.setString(2, this.prijs); sset.setString(3, this.ingredienten); sset.setString(4, this.recept); sset.setInt(5, id); sset.executeUpdate(); } catch(Exception e) { e.printStackTrace(); // Ik maak gebruik van de printstack om meer informatie te verkrijgen bij een exception } } }
I would be very gratefull if you guys could show me how to make a JApplet out of this.
Thanks in advance!!!
This is a crosspost to Problems creating JApplet