AWT- ItemListener adden

Status
Nicht offen für weitere Antworten.
K

Kurt

Gast
Hi! Ich hab ein Programm, dass in Java 1.1 laufen muss. Ich schaffe es zwar, dass die Komponenten angezeigt werden, es tut sich allerdings nichts, wenn ich eine Checkbox oder einen Button anklicke. Ich habs auch schon direkt mit showStatus probiert ob der ActionListener aufgerufen wird, dies ist aber nicht so.
Eine Vermutung von mir: falsches adden des action-/ Itemlistener!
Kann mir jemand sagen wie das in 1.1 bzw. awt funktioniert?
derzeit: Checkbox.addItemListener(this);
Button.addActionListener(this);

Vielen Dank!

mfg
 
G

Gast

Gast
Ich habe dasselbe Problem.

Im JBuilder luft das Applet noch einwandfrei, bzw reagieren sowohl die Checkboxen, als auch der Button auf Klicks.
Alles läuft so, wie es soll...
Im Browser wird das Applet zwar angezeigt, ist aber ansonsten Mausetod.

Gibt es beim Eventhandling grundlegende Unterschiede, als bei normalen Swing oder AWT Gui-Applikationen ?
 
G

Gast

Gast
>Push!<

Vielleicht noch ein paar Infos zu meiner Implementierung :
Das Applet beinhaltet eigentlich nur ein Panel auf dem mehrere RadioButtons und ein Button eingebettet sind.
Die Actionevents werden, wie in Swing/AWT üblich mit einem ActionListener gehandelt und über eine Actionperformed_methode mit Aktionen verknüpft. Im JBuilder (sowohl in der html-Darstellunf als auch in der Applet-Simulation läuft es einwandfrei. Im Browser reagiert das Applet nicht mehr auf Klicks.

Wäre wirklich nett, wenn jemandem etwas dazu einfällt. Es woll eine Umfrage für eine Homepage eines Bekannten werden. Und ich habe versproch, das Ganze in diesem Monat noch Bugfrei abzuliefern ;)

Danke !
 

L-ectron-X

Gesperrter Benutzer
Grundsätzlich sieht die Event-Behandlung in AWT und Swing gleich aus, ganz egal, ob es sich um ein Applet oder eine Applikation handelt.

Ich konnte noch nie gut raten. Also nochmal: Wie siehts denn nun mit dem Code aus?
Um einen Fehler zu finden muss ich schon was von dem Code sehen.
 
G

Gast

Gast
Klasse des Applets :
=============

package umfrageapplet;

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

public class UmfrageApplet extends Applet {
private boolean isStandalone = false;


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


public UmfrageApplet() {
}


public void init() {
try {
jbInit();
this.setSize(450,750);
}
catch(Exception e) {
e.printStackTrace();
}
}


private void jbInit() throws Exception {

setLayout(new BorderLayout());

//Hier wird ein Panel erzeugt und eingebunden, welches die angesprochenen SWING Komponenten entählt

UmfragePanel up = new UmfragePanel();
add(up, BorderLayout.CENTER);

}


public void start() {
}


public void stop() {
}


public void destroy() {
}


public String getAppletInfo() {
return "Applet-Information";
}


public String[][] getParameterInfo() {
return null;
}


public static void main(String[] args) {
UmfrageApplet applet = new UmfrageApplet();
applet.isStandalone = false;
applet.init();
applet.start();
}

}

Klasse UmfragePanel
==============

package umfrageapplet;

import java.awt.*;
import com.borland.jbcl.layout.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;


public class UmfragePanel extends JPanel implements ActionListener{

...
JButton FertigButton = new JButton();
...
FertigButton.setText("Abstimmen");
FertigButton.addActionListener(this);

...
private void fertigButtonPressed(){ ... }

...

public void actionPerformed(ActionEvent event){
if(event.getActionCommand().equals("Abstimmen")) {
fertigButtonPressed();
}

[/quote]
 
G

Guest

Gast
hmm...Jetzt hab ich den Sourcecode gepostet und es gab trotzdem keine Antwort. :(
 

L-ectron-X

Gesperrter Benutzer
Sorry, habe deinen Post übersehen, nicht böse sein. Ich kümmere mich um dein Problem. :wink:

Also, der gepostete Code ist soweit ich das sehe fehlerfrei.
Allerdings hat eine main()-Methode nichts in einem Applet verloren. Möglicherweise liegt da der Hase im Pfeffer.
Wie startest du denn das Applet? Kann ich auch mal den Code der HTML-Seite sehen?
 
G

Gast

Gast
ne, bin nicht böse ! Ich wollte nur nochmal auf das Problem hinweisen, weil ich mir fast gedacht habe, dass es übersehen wurde ;)

Also das Applet binde ich folgendermaßen in das html-file ein :

<body>
<applet code=umfrageapplet\UmfrageApplet.class archive="UmfrageApplet.jar" height="800"
width="500">
Hier steht das Umfrageapplet
</applet>
</body>

Allerdings hat eine main()-Methode nichts in einem Applet verloren. Möglicherweise liegt da der Hase im Pfeffer.

Oh...?!
Da setz ich mal an. Schon'mal vielen Dank für diesen Hinweis !

Allerdings startet das Applet ja. Nur die Swing-Komponenten stellen sich eben taub.
 
S

Spacerat

Gast
Irgendwie kein Wunder...

Zunächst muß das Applet oder die UmfrageKlasse das ActionListener-Interface implementieren (schon geschehen). Dann muß dem Button der Listener huzugefügt werden (Button.addActionlistener(this) ; auch schon geschehen), nun der Knackpunkt: Es reicht nicht, einen Button zu instanzieren, er muß dem Panel noch hinzugefügt werden (UmfragePanel.add(FertigButton)). Da es sich beim UmfagePanel aber um einen JPanel handelt, muß es "UmfragePanel.getContentPane().add(FertigButton)" heissen.

cu Spacerat
 

Wildcard

Top Contributor
Spacerat hat gesagt.:
Da es sich beim UmfagePanel aber um einen JPanel handelt, muß es "UmfragePanel.getContentPane().add(FertigButton)" heissen.

So eine Methode gibts bei JPanels nicht. Die contentPane brauchte man nur bei JFrames, und das hat sich dank dem Tiger auch erledigt.
 
G

Gast

Gast
Der JButton wird in der JPanel-Klasse mit this.add(...) eingebunden.
Die Stelle im Quellcode habe ich nur nicht zitiert.

Nochmal :

Alle Komponenten erscheinen, da wo sie es sollen.
Im JBuilder funktioniert auch alles einandfrei, wenn ich das Projekt kompiliere und laufen lasse.

Das Problem tritt lediglich im Browser auf.
Auch dort sieht augenscheinlich alles so aus wie es soll ( "alles da" ). Nur reagieren die Swing-Komponenten (*nur* im Browser !) nicht auf Mausklicks.
 

Wildcard

Top Contributor
Wolltest du nicht eigentlich ein Java 1.1 kompatibles Applet? Da gab's aber noch gar kein Swing :wink:
 
G

Gast

Gast
Das war ein anderer User ("Kurt"). Bei mir lauft 1.4.2

Ich wollte keinen neuen Thread eröffnen. Meine Posts sind alle von "Gast".
 
G

Gast

Gast
Ok, ich habe das Problem gefunden.
Es hat rein garnichts mit den Swing-Komponenten zu tun und auch die main()-Methode stellt kein kein Problem dar.

Der Haken ist, dass ich im Rahmen der zu implementierenden Umfrage auf ein Textfile (elches auf dem Server liegen soll) zugreifen möchte, was dann eine "AccessControlException" schmeisst.

Ich weiss wohl, dass die Sandbox einen nicht auf Dateien des Clients zugegriffen lässt. Aber das Problem müsste sich eigenlich lösen, wenn ich das Applet nicht mehr lokal starte ?!
Habe derzeit keinen Webspace, sonst hätte ich es schon gestestet. Hole das aber nach.

Das Problem ist auf jeden Fall im Kontext dieses Threads gelöst.

Vielen Dank
 
S

Spacerat

Gast
Da fällt mir gerade ein "throws Exception" ins Auge, welche du mit e.printStackTrace() behandelst. Ich bin mir nicht sicher, wo der Stack hin gepinselt wird. Jedenfalls ist hier erstmal ein Vorschlag. Ändere mal die besagte (bzw. alle gleichartigen) Behandlung wie folgt:
Code:
e.printStackTrace(System.err);
und schau dir mal die Ausgabe in der Konsole an (IE: Extras->Sun Java Console).

cu Spacerat

Edit: Da hammas wider... So wärs also gegangen (oder auch anders)... Aber ich hab' nicht gesehen, das der Thread inzwischen schon zwei Seiten hat. OK forget it.
 
R

Roar

Gast
der stacktrace wird standartmäßig auf den errorstream geschrieben ;)
 
S

Spacerat

Gast
@Roar: Na dann hatte die Antwort ja doch noch 'nen Sinn. Vielen Dank fü die Info.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben