EventHandling

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo!

ich habe eine frage zum EventHandling und zwar:

ich habe ein programm in swing geschrieben, dass mir helfen soll eine dezimalzahl in eine dualzahl zu rechnen! soweit so gut! Es ist so aufgebaut, das oben 2 textfelder sind(Dezimalfeld und Dualfeld) und dann kommen buttons (0-9) sowie ein button start und reset. im fenster unten centriert ist ein textarea feld deklariert das für eine fehlerausgabe dienen soll! Die gui steht soweit, nur macht mein programm noch nichts! Ich hab verschiedene klassen für mein programm geschrieben. z.B Fehlerpanel, DezidualfeldPanel usw. Nun möchte ich das MVC-Modell anwenden, das besagt das die gui vom eventhandling getrennt werden soll! in der klasse, wo ich z.B Reset deklariert habe, sind die listener mit addActionListener registriert! der befehlt lautet in etwa: reset.addActionListener(new ResetActionListener).

In der Klasse ResetActionListener ist die methode actionPerformed drin. Es ist halt ziemlich komisch: ich kann Sachen auf der konsole ausgeben oder ich kann das programm schliesen! aber wenn ich auf das Dezimalfeld in der Klasse Dezidualpanel löschen will kommt immer eine exception! Wie kann ich das machen, das ich von einer anderen klasse auf das jeweilige textfeld, button, textarea zugreifen kann?

muß ich dazu ein package erstellen?
Wenn es nötig ist, kann ich mein programm auch per mail versenden!
Benötige dringend hilfe da ich bald klausur schreibe!!

Vielen dank
Gruß
 
G

gast

Gast
also da kommt immer ein ganze latte von exception!
am anfang steht aber eine nullpointerexception!


gruß
 

Bleiglanz

Gesperrter Benutzer
dann musst du code herzeigen :)

in der Zeile mit der NPE ist irgendwo ein aufruf der form

x.methodenname

=> und x ist versehentlich == null
 
G

Gast

Gast
ok!

kein Problem!

dann schicke ich den quellcode per mail!
MailAdresse?
 
G

Gast

Gast
Code:
//buttonactionListener



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;



public class ButtonActionListener implements ActionListener{

    protected buttonpanel button;
    protected String dezZahl = new String();
    protected framegui programm;
    protected Container ContentPane;
    protected String cmd;
    protected JButton sender;
    protected buttonpanel vater;
    protected JPanel epanel;
    protected JPanel fpanel;



    public void actionPerformed(ActionEvent e){
        sender = (JButton) e.getSource();
        vater = (buttonpanel)sender.getParent();
        ContentPane = vater.getParent();




       if(e.getActionCommand().equals("0")){
           dezZahl = dezZahl +0;


       }
       if(e.getActionCommand().equals("1")){
           dezZahl = dezZahl +1;
       }
    }     
};

edited by thE_29: CODETAGS!!!
 
G

Gast

Gast
Code:
//buttonpanel.java//



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class buttonpanel extends JPanel
{

    //Layout, Buttons und Panel erstellen
    protected Font font = new Font("Arial",Font.BOLD,14);
    protected JButton Taste1 = new JButton("1");
    protected JButton Taste2 = new JButton("2");
    protected JButton Taste3 = new JButton("3");
    protected JButton Taste4 = new JButton("4");
    protected JButton Taste5 = new JButton("5");
    protected JButton Taste6 = new JButton("6");
    protected JButton Taste7 = new JButton("7");
    protected JButton Taste8 = new JButton("8");
    protected JButton Taste9 = new JButton("9");
    protected JButton Taste0 = new JButton("0");
    protected JButton TasteS = new JButton("Start");
    protected JButton TasteR = new JButton("Reset");
    protected StartActionListener sal = new StartActionListener();
    protected ResetActionListener ral = new ResetActionListener();
    protected ButtonActionListener bal = new ButtonActionListener();

  public buttonpanel()
  {
    this.setLayout(new GridLayout(7,2));
    this.Taste0.addActionListener(bal);
    this.Taste0.setActionCommand("0");
    this.Taste0.setFont(font);
    this.add(this.Taste0);
    this.Taste1.addActionListener(bal);
    this.Taste1.setActionCommand("1");
    this.Taste1.setFont(font);
    this.add(this.Taste1);
    this.Taste2.addActionListener(bal);
    this.Taste2.setActionCommand("2");
    this.Taste2.setFont(font);
    this.add(this.Taste2);
    this.Taste3.addActionListener(bal);
    this.Taste3.setActionCommand("3");
    this.Taste3.setFont(font);
    this.add(this.Taste3);
    this.Taste4.addActionListener(bal);
    this.Taste4.setActionCommand("4");
    this.Taste4.setFont(font);
    this.add(this.Taste4);
    this.Taste5.addActionListener(bal);
    this.Taste5.setActionCommand("5");
    this.Taste5.setFont(font);
    this.add(this.Taste5);
    this.Taste6.addActionListener(bal);
    this.Taste6.setActionCommand("6");
    this.Taste6.setFont(font);
    this.add(this.Taste6);
    this.Taste7.addActionListener(bal);
    this.Taste7.setActionCommand("7");
    this.Taste7.setFont(font);
    this.add(this.Taste7);
    this.Taste8.addActionListener(bal);
    this.Taste8.setActionCommand("8");
    this.Taste8.setFont(font);
    this.add(this.Taste8);
    this.Taste9.addActionListener(bal);
    this.Taste9.setActionCommand("9");
    this.Taste9.setFont(font);
    this.add(this.Taste9);
    this.TasteS.addActionListener(sal);
    this.TasteS.setActionCommand("Start");
    this.TasteS.setFont(font);
    this.add(this.TasteS);
    this.TasteR.addActionListener(ral);
    this.TasteR.setActionCommand("Reset");
    this.TasteR.setFont(font);
    this.add(this.TasteR);
  }

  public JPanel getTastenpanel()
  {
    return this;
  }
}
 
G

Gast

Gast
Code:
//dezidualpanel//


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class dezidualpanel extends JPanel {

    public Font font = new Font("Arial", Font.BOLD,14);
    public JTextField Dezimal;
    public JTextField Dual;
    public fehlerpanel fehler;


 public dezidualpanel(){

        setLayout(new GridLayout(1,2));
        JTextField Dezimal = new JTextField(5);
        JTextField Dual = new JTextField(16);
        Dezimal.setFont(font);
        Dezimal.setToolTipText("Feld für Dezimalzahl");
        Dezimal.setEditable(true);
        add(Dezimal);
        Dual.setFont(font);
        Dual.setToolTipText("Feld für Dualzahl");
        Dual.setEditable(true);
        add(Dual);

    }

};
 
G

Gast

Gast
Code:
//ResetActionListener

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.text.*;


public class ResetActionListener  implements ActionListener{

    protected JPanel eingabepanel;
    protected JPanel fehlerpanel;
    protected String dezZahl = new String();
    protected Integer dez = null;
    protected String cmd = new String();
    protected framegui programm;
    protected Container ContentPane;
    protected JButton sender;
    protected buttonpanel vater;
    protected dezidualpanel wohin;


    public void actionPerformed(ActionEvent e) {

        sender = (JButton) e.getSource();

        if (e.getActionCommand().equals("Reset")) {

        }

    }
};
 
G

Gast

Gast
//fehlermeldungen im Jbuilder 2005

java.lang.ClassCastException

at StartActionListener.actionPerformed(StartActionListener.java:28)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

at java.awt.Component.processMouseEvent(Component.java:5100)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
 

Bleiglanz

Gesperrter Benutzer
code tags verwenden

... at StartActionListener.actionPerformed

bitte nur diesen StartActionListener
 

thE_29

Top Contributor
Will ja jetzt nix sagen, aber am liebsten würde ich den Thread zumachen...

Da du dir überhaupt keine Mühe machst deine Frage richtig zu stellen...

Weder die Exception richtig gepostet noch die CodeTags!!
 
G

Gast

Gast
hab keine ahung was ihr meint!

könnt ihr mir nicht anhand vom "reset" sagen was ich da jetzt schreiben soll, damit er im dezidualpanel das dezimalfeld löscht wenn ich was eingetragen habe!

Danke
 
R

Roar

Gast
Anonymous hat gesagt.:
könnt ihr mir nicht anhand vom "reset" sagen was ich da jetzt schreiben soll, damit er im dezidualpanel das dezimalfeld löscht wenn ich was eingetragen habe!

nein.
lies die fehlermeldung, oder glaubst du die ganzen zeilen stehen da nur so zum spaß da ?
dein resetlistener hat nix mit dem fehler zu tun
 

Semerzo

Aktives Mitglied
Damit aus einer 8 und einem ')' kein 8) wird, sollte man das [<code>]-Tag benutzen! Vereinfacht das Lesen ungemein!

Arbeite folgendes Tutorial durch! Du kannst dir auch jene Topics aussuchen, die für deine Aufgaben reichen:
http://java.sun.com/docs/books/tutorial/uiswing/index.html

Bei solch einfachen ActionListenern wie du sie benötigst, würde ich dir ferner Inner Classes empfehlen. Auf Inner Classes sollte auch im vorherigen Tutorial eingegangen worden sein!

Das erspart dir die Übergabe von Attributen. Innere Klassen können auf die Attribute ihrer umschließenden Klasse zugreifen, direkt!

Hast du gemerkt, dass Ausrufezeichen unfreundlich wirken? Gerade wenn man Fragen stellt, sollte man sich evtl so nett geben, wie man ist. (!)

Zu deinem Problem:
Steht doch alles da:
Code:
//fehlermeldungen im Jbuilder 2005

java.lang.ClassCastException

at StartActionListener.actionPerformed(StartActionListener.java:28)
Code:
//buttonactionListener



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;



public class ButtonActionListener implements ActionListener{

    protected buttonpanel button;
    protected String dezZahl = new String();
    protected framegui programm;
    protected Container ContentPane;
    protected String cmd;
    protected JButton sender;
    protected buttonpanel vater;
    protected JPanel epanel;
    protected JPanel fpanel;



    public void actionPerformed(ActionEvent e){
        sender = (JButton) e.getSource();
        vater = (buttonpanel)sender.getParent();
        ContentPane = vater.getParent();




       if(e.getActionCommand().equals("0")){
           dezZahl = dezZahl +0;


       }
       if(e.getActionCommand().equals("1")){
           dezZahl = dezZahl +1;
       }
    }     
};
Jetzt darfst du raten, wo der Fehler liegt. Wo wird hier in der Nähe von Zeile 28 eine Cast Operation durchgeführt?
 
T

tuxedo

Gast
Also ich bin mal gnädig und verrate dir wo der Fehler liegt und geb dir gleich nch nen Tipp wie mans besser machen kann:

Dein Fehler tritt in der ActionPerformed-Methode auf, und zwar hier in der Gegend:

Code:
 sender = (JButton) e.getSource();
        vater = (buttonpanel)sender.getParent();

Du versuchst da was zu "casten" was sich aber nicht casten lässt.

Besser wäre es wenn du das so lösen würdest:

Code:
if (e.getSource().equals(Taste0)) {

     tue irgendwas

}

if (e.getSource().equals(irgendEinAnderesObjektDasManDrückenKannUndEinenEventAuslöst)) {

     tue irgendwas was anderes

}

Somit sparst du dir den ActionCommand und das casten.


So, das war mein Hinweis. Hoffe du findest jetzt den Fehler und achtest in Zukunft auf die exceptions die dir in 99% der fälle verraten wo der Fehler zu finden ist.

Und beim nächsten unlösrbaren Problem korrekt und ausführlich die Frage stellen und Code-Beispiele bringen.

- Alex
 

Semerzo

Aktives Mitglied
Hab ich das nicht gesagt?

Ok, hab mich ein bissel hinreissen lassen. :) Sag mal, ob's geklappt hat und setzt einen Haken drunter

MfG Sem
 
T

tuxedo

Gast
Semerzo hat gesagt.:
Hab ich das nicht gesagt?

Ok, hab mich ein bissel hinreissen lassen. :) Sag mal, ob's geklappt hat und setzt einen Haken drunter

MfG Sem

Oh, na da hab ich mcih doch glatt vom vielen Text verwirren lassen :)

Naja, doppelt hält besser.. wenns jetzt nicht klappt... ;-)

- Alex
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben