Avatar billede mannik Nybegynder
12. februar 2004 - 14:07 Der er 18 kommentarer og
1 løsning

Jbuilder - hjælp til en lille opgave

Jeg er ved at prøve mig lidt frem i Jbuilder, jeg har prøvet at lave en primitiv applet hvor jeg vil beregne arealet af en cirkel. Der er udelukkende for at få en fornemmelse af Jbuilder at jeg giver mig i kast med dette. Jeg har lavet mit layout men jeg kan ikke rigtigt finde ud af hvor jeg skal indtaste de forskellige formler. Kunne jeg f.eks bruge Events felterne i inspector til noget? Eller skal jeg ind i kildekoden? Hvordan tackler jeg en sådan opgave lettest?
Jeg har indtil videre i min source:
package calculate_circle;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class calulateCircle extends Applet {
  private boolean isStandalone = false;
  BorderLayout borderLayout1 = new BorderLayout();
  Panel upper = new Panel();
  Panel center = new Panel();
  Label label1 = new Label();
  TextField textField1 = new TextField();
  Label label2 = new Label();
  Button button1 = new Button();

  //Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
      (getParameter(key) != null ? getParameter(key) : def);
  }

  //Construct the applet
  public calulateCircle() {
  }

  //Initialize the applet
  public void init() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    this.setVisible(true);
    this.setLayout(borderLayout1);
    upper.setBackground(Color.blue);
    label1.setFont(new java.awt.Font("Arial", 0, 18));
    label1.setText("Type radius of circle");
    textField1.setFont(new java.awt.Font("Arial", 0, 18));
    textField1.setText("");
    button1.setLabel("Calculate area");
    this.add(upper,  BorderLayout.NORTH);
    this.add(center, BorderLayout.CENTER);
    upper.add(label1, null);
    upper.add(textField1, null);
    center.add(button1, null);
    center.add(label2, null);
  }

  //Start the applet
  public void start() {
  }

  //Stop the applet
  public void stop() {
  }

  //Destroy the applet
  public void destroy() {
  }

  //Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }

  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }
}
Avatar billede arne_v Ekspert
12. februar 2004 - 14:21 #1
Det meste af det er bare noget som enten er krævet af applets eller som
JBuilder adder for at give dig nogle muligheder.

Grundliggende skal du vel bare have:
  * et text field hvor man kan indtaste radius
  * en button som beregner areal udfra radius
  * et eller andet som areal kan vises i
Avatar billede arne_v Ekspert
12. februar 2004 - 14:28 #2
Jeg tror at det er button addActionlistener du mangler for at få
tingene til at hænge sammen.
Avatar billede mannik Nybegynder
12. februar 2004 - 14:43 #3
Det har du nok ret i, det jeg så gør rent praktisk er det at i Events skriver i feltet Eventhandler (tror jeg det hedder, jeg har lige lukket for for den pc med jbuilder) skriver addActionListener? og kan jeg skrive min formel (radius x radius x 3,14) et andet sted end i koden? som sagt, det jeg gerne vil er at få en fornemmelse for Jbuilder og anvende det rigtigt, jeg har en fornemmelse af at det er et godt program når man får det lært.
Avatar billede arne_v Ekspert
12. februar 2004 - 16:36 #4
Hvis du erklærer din klasse som:

extends Applet implements ActionListener

og kalder:

button.addActionListener(this);

i jbInit og laver en metode:

  public void actionPerformed(ActionEvent ev) {
    if(ev.getSource() == jRadioButton1) {
        // kode der udføres ved klik på button
    }
  }

så begynder det at ligne noget !
Avatar billede mannik Nybegynder
12. februar 2004 - 22:30 #5
Jeg kom faktisk så langt som til dette:
oid button1_actionPerformed(ActionEvent e) {
        label2.setText("Hello World");
  }

  void textField1_actionPerformed(ActionEvent e) {
if(e.getSource()== jtfRadius);{
      double radius =
          Double.parseDouble(jtfRadius.getText().trim());
      double area = (radius * radius)* 3.14159;
    }
  }

}
Avatar billede arne_v Ekspert
12. februar 2004 - 22:35 #6
Umiddelbart kan jeg ikke se hvorfor du vil have en acction listener på
tekst feltet ?

Det vil du vel ikke klikke på ?

button action listener kan sagtens:

double radius = Double.parseDouble(jtfRadius.getText().trim());
double area = (radius * radius)* Math.PI;
label2.setText(Double.toString(area));
Avatar billede mannik Nybegynder
12. februar 2004 - 22:37 #7
Så nu gik der ged i det; Min Hello World har jeg for at teste min knap, det virker, og hvis jeg nu erklærer variablen jtfRadius som jtfRadius.addActionListener(this); er jeg så helt galt på den? Kan jeg så i min label2.setText skrive ("new Double(area).toString()); ?
Ret mig venligst hvor jeg går galt
Avatar billede mannik Nybegynder
12. februar 2004 - 22:38 #8
ahh du er for hurtig Arne, jeg prøver lige
Avatar billede mannik Nybegynder
12. februar 2004 - 22:47 #9
Arne , jeg vender lige tilbage imorgen med point, jeg vil gerne lige prøve det her rigtigt af før jeg lukker, håber det er iorden?
Avatar billede arne_v Ekspert
12. februar 2004 - 22:50 #10
Helt iorden.
Avatar billede mannik Nybegynder
13. februar 2004 - 14:23 #11
Jeg ved ikke om jeg har fået rodet begreberne lidt sammen, jeg får en fejlmeddelse i linie 79 : jtf.addActionListener(this); Der er identifier extected. Hele smøen se sådan ud :
package calculate_circle;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class calulateCircle extends Applet {
  private boolean isStandalone = false;
  BorderLayout borderLayout1 = new BorderLayout();
  Panel upper = new Panel();
  Panel center = new Panel();
  Label label1 = new Label();
  TextField textField1 = new TextField();
  Label label2 = new Label();
  Button button1 = new Button();

  //Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
        (getParameter(key) != null ? getParameter(key) : def);
  }

  //Construct the applet
  public calulateCircle() {
  }

  //Initialize the applet
  public void init() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    this.setVisible(true);
    this.setLayout(borderLayout1);
    upper.setBackground(Color.blue);
    label1.setFont(new java.awt.Font("Arial", 0, 18));
    label1.setText("Type radius of circle");
    textField1.setFont(new java.awt.Font("Arial", 0, 18));
    textField1.setText("");
    textField1.addActionListener(new calulateCircle_textField1_actionAdapter(this));
    button1.setLabel("Calculate area");
    button1.addActionListener(new calulateCircle_button1_actionAdapter(this));
    label2.setText("Result here");
    this.add(upper, BorderLayout.NORTH);
    this.add(center, BorderLayout.CENTER);
    upper.add(label1, null);
    upper.add(textField1, null);
    center.add(button1, null);
    center.add(label2, null);
  }

  //Start the applet
  public void start() {
  }

  //Stop the applet
  public void stop() {
  }

  //Destroy the applet
  public void destroy() {
  }

  //Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }

  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }
  jtfRadius.addActionListener(this);
  void button1_actionPerformed(ActionEvent e) {
    if (e.getSource() == jtfRadius);
    {
      double radius =
          Double.parseDouble(jtfRadius.getText().trim());
      double area = (radius * radius) * 3.14159;

      label2.setText(Double.toString(area));
    }
  }

  void textField1_actionPerformed(ActionEvent e) {

  }

  class calulateCircle_button1_actionAdapter
      implements java.awt.event.ActionListener {
    calulateCircle adaptee;

    calulateCircle_button1_actionAdapter(calulateCircle adaptee) {
      this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
      adaptee.button1_actionPerformed(e);
    }
  }

  class calulateCircle_textField1_actionAdapter
      implements java.awt.event.ActionListener {
    calulateCircle adaptee;

    calulateCircle_textField1_actionAdapter(calulateCircle adaptee) {
      this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
      adaptee.textField1_actionPerformed(e);
    }
  }
}
Avatar billede arne_v Ekspert
13. februar 2004 - 14:30 #12
jtfRadius.addActionListener(this);

er anbragt udenfor metoder og er derfor ikke en gyldig sætning !
Avatar billede mannik Nybegynder
13. februar 2004 - 15:04 #13
jeg kan ikke rigtigt greje hvor jeg skal have den? Jeg har prøvet i button1 uden held
Avatar billede arne_v Ekspert
13. februar 2004 - 15:22 #14
Jeg vil foreslå noget a la:

package test;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class CalcCircle extends Applet implements ActionListener {
  private boolean isStandalone = false;
  BorderLayout borderLayout1 = new BorderLayout();
  Panel upper = new Panel();
  Panel center = new Panel();
  Label label1 = new Label();
  TextField textField1 = new TextField();
  Label label2 = new Label();
  Button button1 = new Button();

  //Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
        (getParameter(key) != null ? getParameter(key) : def);
  }

  //Construct the applet
  public CalcCircle() {
  }

  //Initialize the applet
  public void init() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    this.setVisible(true);
    this.setLayout(borderLayout1);
    upper.setBackground(Color.blue);
    label1.setFont(new java.awt.Font("Arial", 0, 18));
    label1.setText("Type radius of circle");
    textField1.setFont(new java.awt.Font("Arial", 0, 18));
    textField1.setText("              ");
    button1.setLabel("Calculate area");
    button1.addActionListener(this);
    label2.setText("Result here");
    this.add(upper, BorderLayout.NORTH);
    this.add(center, BorderLayout.CENTER);
    upper.add(label1, null);
    upper.add(textField1, null);
    center.add(button1, null);
    center.add(label2, null);
  }

  //Start the applet
  public void start() {
  }

  //Stop the applet
  public void stop() {
  }

  //Destroy the applet
  public void destroy() {
  }

  //Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }

  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == button1);
    {
      double radius =
          Double.parseDouble(textField1.getText().trim());
      double area = (radius * radius) * Math.PI;

      label2.setText(Double.toString(area));
    }
  }
}
Avatar billede arne_v Ekspert
13. februar 2004 - 15:22 #15
(jeg har omdøbt pakke og klasse da jeg kopierede din kode ind i min JBuilder)
Avatar billede mannik Nybegynder
13. februar 2004 - 16:44 #16
tak Arne, det er til at lære noget af, jeg kan nu se hvor jeg er galt på den. Det var lige sådan noget der var formålet. Endnu en gang..TAK
Avatar billede mannik Nybegynder
13. februar 2004 - 18:52 #17
Arne et sidste: Hvad menes der med dette ; calculate_circle.calulateCircle should be declared abstract; it does not define actionPerformed(java.awt.event.ActionEvent) in calculate_circle.calulateCircle at line 7 (7:1)

?
Avatar billede arne_v Ekspert
13. februar 2004 - 18:55 #18
At du har tilføjet:

implements ActionListener

uden at tilføje:

public void actionPerformed(ActionEvent e) {
}
Avatar billede mannik Nybegynder
13. februar 2004 - 19:31 #19
hehe jeg havde public void button1_actionPerformed(ActionEvent e)

Tak Arne, jeg har lært en del ud fra dette!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester