Applet opzetten met JList, JButton, JTextField enz.

Status
Niet open voor verdere reacties.

Clemens Schalkw

Gebruiker
Lid geworden
5 dec 2007
Berichten
166
Ik ben bezig met het maken van mijn eerste applet.
Nu heb ik een aantal components aangemaakt, maar snap niet hoe ik die in de applet moet gaan zetten.
Moet ik nu gebruik gaan maken van JFrame, JPanel of iets anders?
Moet ik LayoutManagers gebruiken of niet ?

Uiteindelijk moet het geheel met een database gaan werken en moeten er dus events aan toegevoegd gaan worden, maar ik zal al blij zijn als ik de GUI heb staan :D

Hieronder de code die ik tot nu toe heb:

Code:
import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class Kreta {
	
     JButton addButton;
     JButton newButton;
     JButton deleteButton;
     JButton editButton;
     
     JList dishesList;
     
     JTextField dish;
     
     JTextArea recipe;
     JTextArea ingredients;
     
     JLabel textField;
     JLabel textArea;
 
     public void init() {
    	 
    	 addButton = new JButton("Voeg Toe");
    	 newButton = new JButton("Nieuw");
    	 deleteButton = new JButton("Verwijder");
    	 editButton = new JButton("Bewerk");
    	 
    	 String[] dishes = {"gerecht 1",
    			 			"gerecht 2",
    			 			"gerecht 3",
    			 			"gerecht 4",
    			 			"gerecht 5"};
    	 }
     
    	 dishesList = new JList(dishes);
    	 
    	 dish = new JTextField(40);
    	 
    	 recipe = new TextArea(90, 150);
    	 ingredients = new TextArea(90, 150);

   }

}
 
Ik zie geen add aanroepen (dat moest toch? dit is zooooo lang geleden)

Mijn advies: neem een fatsoenlijk ide (bijv http://www.netbeans.org/ ). Dan kan je gewoon slepen en schrijft netbeans de code voor je. Scheelt zoveeel dom tikwerk
 
Ik probeer Java te leren programmeren. Ik probeer niet een generator te leren gebruiken. ;)

add() wil k wel toevoegen, maar waaraan?

Ik wil de verschillende dingen kunnen positioneren, dus voor add ik het daan aan?
Een JFrame? Een JPanel? gewoon de Applet.
Worden daar LayoutManagers voor gebruikt?
Kan ik van 1 layoutmanagers meerdere instansies maken en hoe zet ik die dan onder / naast elkaar?

Alvast bedankt voor de hulp.
 
Inmiddels ben ik al een eind verder.
Ik heb een frame toegevoegd waarin ik in de BorderLayouts een aantal panels toevoeg.
Ik heb echter nog 1 probleem.
Als ik deze in de browser laadt, wordt hij als "popup" getoond ipv in de browser zelf.
Enig idee wat ik anders moet doen?

Code:
import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Kreta extends JApplet
{

  protected static final long serialVersionUID = 1;

  JButton                     addButton;
  JButton                     newButton;
  JButton                     deleteButton;
  JButton                     editButton;

  JList                       dishesList;

  JTextField                  dish;

  JTextArea                   recipe;
  JTextArea                   ingredients;

  JLabel                      textField;
  JLabel                      textArea;

  @Override
  public void init()
  {

    addButton = new JButton("Voeg Toe");
    newButton = new JButton("Nieuw");
    deleteButton = new JButton("Verwijder");
    editButton = new JButton("Bewerk");

    String[] dishes = { "gerecht 1", "gerecht 2", "gerecht 3", "gerecht 4", "gerecht 5" };

    dishesList = new JList(dishes);

    dish = new JTextField(40);

    recipe = new JTextArea(90, 150);
    ingredients = new JTextArea(90, 150);

    JFrame frame = new JFrame("Kreta - Restaurant");

    JPanel headerPanel = new JPanel();
    headerPanel.setBackground(Color.green);
    headerPanel.add(addButton);
    headerPanel.add(newButton);
    headerPanel.add(deleteButton);
    headerPanel.add(editButton);

    frame.getContentPane().add(BorderLayout.NORTH, headerPanel);

    JPanel leftPanel = new JPanel();
    leftPanel.setBackground(Color.red);
    leftPanel.add(dishesList);

    frame.getContentPane().add(BorderLayout.WEST, leftPanel);

    frame.setSize(600, 600);
    frame.setVisible(true);

  }

}
 
JApplet is zelf een container. Een JFrame is een window. Je moet dus die controls toevoegen aan je JApplet als je het in je webpagina wilt integreren
Wat betreft die generator, ik heb er erg veel van geleerd van code van dat ding lezen. Vooral anonieme binnenclassen zijn erg handig en dat heb ik toch echt opgestoken van code van de generator lezen. Overigens is het goed dat je weet hoe een GUI maken in java werkt, maar als je grotere applicaties gaat maken wil je dat echt niet allemaal met de hand tikken
 
Als ik de initialisatie van mijn JFrame verander in een JApplet krijg ik geen GUI meer te zien.

Ik maak dus van

JFrame frame = new JFrame();

dit:

JApplet frame = new JApplet();


Wat zou ik nog moeten veranderen?

Tot nu toe heb ik:

Code:
import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

public class Kreta extends JApplet
{

  protected static final long serialVersionUID = 1;

  /*
   * Include the JButtons which will be used in the applet.
   * 
   * @addButton @newButton @deleteButton @editButton
   */

  JButton                     addButton;
  JButton                     newButton;
  JButton                     deleteButton;
  JButton                     editButton;

  /*
   * One JList will be added to the applet to list all dishes added to the database
   * 
   * @dishesList
   */

  JList                       dishesList;

  /*
   * Three JTextFields will be added to the applet to split name, dish & price to the database @ name @ dish @ price
   */

  JTextField                  name;
  JTextField                  dish;
  JTextField                  price;

  /*
   * Two JTextArea's are added to the applet to show the ingredients and the recipe of a dish @ recipe @ ingredients
   */

  JTextArea                   recipe;
  JTextArea                   ingredients;

  /*
   * JLabels will be added to the textfields and textarea's
   */

  JLabel                      nameTextField;
  JLabel                      dishTextField;
  JLabel                      priceTextField;

  JLabel                      recipeTextArea;
  JLabel                      ingredientsTextArea;

  @Override
  public void init()
  {

    addButton = new JButton("Voeg Toe");
    newButton = new JButton("Nieuw");
    deleteButton = new JButton("Verwijder");
    editButton = new JButton("Bewerk");

    String[] dishes = { "gerecht 1", "gerecht 2", "gerecht 3", "gerecht 4", "gerecht 5", "gerecht 6", "gerecht 7",
        "gerecht 8", "gerecht 9", "gerecht 10" };

    dishesList = new JList(dishes);

    name = new JTextField(12);
    nameTextField = new JLabel();
    nameTextField.setText("naam");

    dish = new JTextField(12);
    dishTextField = new JLabel();
    dishTextField.setText("gerecht");

    price = new JTextField(5);
    priceTextField = new JLabel();
    priceTextField.setText("prijs €");

    recipe = new JTextArea(10, 20);
    recipeTextArea = new JLabel();
    recipeTextArea.setText("recept");

    ingredients = new JTextArea(10, 10);
    ingredientsTextArea = new JLabel();
    ingredientsTextArea.setText("ingrediënten");

    JFrame frame = new JFrame("Kreta - Restaurant");

    /*
     * Make different Jpanels for each boxLayout-region @ headerPanel @ rightPanel @ footerPanel @ leftPanel @
     * centerPanel
     */

    JPanel headerPanel = new JPanel();
    JPanel rightPanel = new JPanel();
    JPanel footerPanel = new JPanel();
    JPanel leftPanel = new JPanel();
    JPanel centerPanel = new JPanel();

    headerPanel.setBackground(Color.green);
    rightPanel.setBackground(Color.cyan);
    footerPanel.setBackground(Color.pink);
    leftPanel.setBackground(Color.red);
    centerPanel.setBackground(Color.blue);

    JScrollPane recipeScroller = new JScrollPane(recipe);
    JScrollPane ingredientsScroller = new JScrollPane(ingredients);

    recipe.setLineWrap(true);
    ingredients.setLineWrap(true);

    recipeScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    recipeScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

    ingredientsScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    ingredientsScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

    headerPanel.add(addButton);
    headerPanel.add(newButton);
    headerPanel.add(deleteButton);
    headerPanel.add(editButton);

    leftPanel.add(dishesList);

    footerPanel.add(nameTextField);
    footerPanel.add(name);
    footerPanel.add(dishTextField);
    footerPanel.add(dish);
    footerPanel.add(priceTextField);
    footerPanel.add(price);

    centerPanel.add(ingredientsScroller);
    centerPanel.add(ingredientsTextArea);
    centerPanel.add(ingredients);
    centerPanel.add(recipeScroller);
    centerPanel.add(recipeTextArea);
    centerPanel.add(recipe);

    frame.getContentPane().add(BorderLayout.NORTH, headerPanel);
    frame.getContentPane().add(BorderLayout.EAST, rightPanel);
    frame.getContentPane().add(BorderLayout.SOUTH, footerPanel);
    frame.getContentPane().add(BorderLayout.WEST, leftPanel);
    frame.getContentPane().add(BorderLayout.CENTER, centerPanel);

    frame.setSize(600, 600);
    frame.setVisible(true);

  } // close init-method

  @Override
  public void start()
  {

  } // close start-method
} // close applet


Ik ben het overigens met je eens dat je veel kan leren van het lezen van generated code, echter ken ik mezelf en ben ik op een gegeven moment alleen nog maar aan het genereren.
Verder weet ik bijvoorbeeld van FrontPage nog wel dat je daar niet echt de beste html van leert.
Mijn Java - kennis is nog niet op een dusdanig niveau dat ik de eventuele crap eruit kan halen.
 
Laatst bewerkt:
PHP:
class blabla extends JApplet

Je hoeft dus geen JApplet aan te maken, die heb je nl al.
PHP:
this.add(new JButton("Klikme"));
Misschien dat je ook voor een JApplet het contantpane moet hebben, dat herinner ik met niet zo snel
 
Top.
Dit werkt. Dank je wel.
Kun je me misschien ook opweg helpen met de actionListener ? of kan ik hier beter een aparte topic voor openen?

Ik wil, in eerste instantie om te kijken hoe het werkt, door het klikken op een knop de achtergrond wijzigen van het centerPanel (JPanel) en de JTextFields vervangen door een gecentreerde tekst.
Ik wil voor de buttons addAction en deleteAction beide een andere actie uitvoeren.
De classes welke de ActionListener implementeren heb al gemaakt als inner-classes.
Echter als ik deze wil toevoegen aan this kan dat natuurlijk niet.
Moet ik dan een instantie maken van Kreta of hoe ga ik dit doen?

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

public class Kreta extends JApplet
{

  protected static final long serialVersionUID = 1;

  /*
   * Include the JButtons which will be used in the applet.
   * 
   * @addButton @newButton @deleteButton @editButton
   */

  JButton                     addButton;
  JButton                     newButton;
  JButton                     deleteButton;
  JButton                     editButton;

  /*
   * One JList will be added to the applet to list all dishes added to the database
   * 
   * @dishesList
   */

  JList                       dishesList;

  /*
   * Three JTextFields will be added to the applet to split name, dish & price to the database @ name @ dish @ price
   */

  JTextField                  name;
  JTextField                  dish;
  JTextField                  price;

  /*
   * Two JTextArea's are added to the applet to show the ingredients and the recipe of a dish @ recipe @ ingredients
   */

  JTextArea                   recipe;
  JTextArea                   ingredients;

  /*
   * JLabels will be added to the textfields and textarea's
   */

  JLabel                      nameTextField;
  JLabel                      dishTextField;
  JLabel                      priceTextField;

  JLabel                      recipeTextArea;
  JLabel                      ingredientsTextArea;

  @Override
  public void init()
  {

    addButton = new JButton("Voeg Toe");
    newButton = new JButton("Nieuw");
    deleteButton = new JButton("Verwijder");
    editButton = new JButton("Bewerk");

    String[] dishes = { "gerecht 1", "gerecht 2", "gerecht 3", "gerecht 4", "gerecht 5", "gerecht 6", "gerecht 7",
        "gerecht 8", "gerecht 9", "gerecht 10" };

    dishesList = new JList(dishes);

    name = new JTextField(12);
    nameTextField = new JLabel();
    nameTextField.setText("naam");

    dish = new JTextField(12);
    dishTextField = new JLabel();
    dishTextField.setText("gerecht");

    price = new JTextField(5);
    priceTextField = new JLabel();
    priceTextField.setText("prijs €");

    recipe = new JTextArea(10, 20);
    recipeTextArea = new JLabel();
    recipeTextArea.setText("recept");

    ingredients = new JTextArea(10, 10);
    ingredientsTextArea = new JLabel();
    ingredientsTextArea.setText("ingrediënten");


    /*
     * Make different Jpanels for each boxLayout-region @ headerPanel @ rightPanel @ footerPanel @ leftPanel @
     * centerPanel
     */

    JPanel headerPanel = new JPanel();
    JPanel rightPanel = new JPanel();
    JPanel footerPanel = new JPanel();
    JPanel leftPanel = new JPanel();
    JPanel centerPanel = new JPanel();

    headerPanel.setBackground(Color.red);
    rightPanel.setBackground(Color.red);
    footerPanel.setBackground(Color.red);
    leftPanel.setBackground(Color.red);
    centerPanel.setBackground(Color.blue);

    JScrollPane recipeScroller = new JScrollPane(recipe);
    JScrollPane ingredientsScroller = new JScrollPane(ingredients);

    recipe.setLineWrap(true);
    ingredients.setLineWrap(true);

    recipeScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    recipeScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

    ingredientsScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    ingredientsScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

    headerPanel.add(addButton);
    headerPanel.add(newButton);
    headerPanel.add(deleteButton);
    headerPanel.add(editButton);

    //   werkt in compiler, niet in applet
    addButton.addActionListener(new addAction());
    newButton.addActionListener(new newAction());
    deleteButton.addActionListener(new deleteAction());
    editButton.addActionListener(new editAction());

    leftPanel.add(dishesList);

    footerPanel.add(nameTextField);
    footerPanel.add(name);
    footerPanel.add(dishTextField);
    footerPanel.add(dish);
    footerPanel.add(priceTextField);
    footerPanel.add(price);

    centerPanel.add(ingredientsScroller);
    centerPanel.add(ingredientsTextArea);
    centerPanel.add(ingredients);
    centerPanel.add(recipeScroller);
    centerPanel.add(recipeTextArea);
    centerPanel.add(recipe);

    this.getContentPane().add(BorderLayout.NORTH, headerPanel);
    this.getContentPane().add(BorderLayout.EAST, rightPanel);
    this.getContentPane().add(BorderLayout.SOUTH, footerPanel);
    this.getContentPane().add(BorderLayout.WEST, leftPanel);
    this.getContentPane().add(BorderLayout.CENTER, centerPanel);

    this.setSize(600, 600);
    this.setVisible(true);

  } // close init-method
  class addAction implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
      
      
    }
  }

  class newAction implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
      System.out.println("nieuw button");
    }
  }

  class editAction implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
      System.out.println("wijzig button");
    }
  }

  class deleteAction implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
      System.out.println("Verwijder button");
    }
  }

  @Override
  public void start()
  {

  } // close start-method
} // close applet
 
PHP:
button.addActionListen(new this.addAction());
(of wat het this.new addAction()?)

Overigens is het gebruikelijk om je classes met een hoofdletter te laten beginnen AddAction
Wat helemaal cool is om anonieme inner classes te gebruiken:
PHP:
class Form1 externds JForm
{
 JButton button1 = new JButton("Kickme");

 void button1_clicked(actionEvent e)
 {
  //doe iets!
 }

 void Init()
 {
  button1.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) {
   button1_clicked(e); 
   }});
 }
}

Zo uit m'n hoofd dan hè. Tik- en spelfouten daargelaten. Inner classes kunnen de methoden van hun outer class aanroepen
 
Java programmeren

Hoi Clemens,

Ik ben met dezelfde java opdracht als jij bezig (kreta database; jij hebt m vorig jaar al gedaan). Ik wilde vragen of je mij wat tips kunt geven waar je oplossingen hebt kunnen vinden en hoe je problemen hebt opgelost. Ik zag dat je op een gegeven moment professioneel met Java aan de slag bent gegaan: :cool: Ik werk als VBA programmeur maar ik zie mezelf absoluut geen professional met Java worden.

Groet,


Agathe
 
Ik heb hem nooit af gemaakt.
Ik sta op het punt om een Sun examen te doen. Daarmee krijg ik vrijstelling voor deze module.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan