PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Newbie Frage zu Applet



commodore
25-05-2008, 10:09
Hi an alle freundlichen Leser und Helfer.

Ich versuche mal, mein Problem zu beschreiben:

Ich, Abendschüler, der objektorientiertes programmieren in der Abendschule seit 1 Jahr ein mini-bisschen lernen soll, wollte ein kleines Progrämmchen mit Arrays, List usw schreiben. Hat geklappt, ist richtig nett und bin wahnsinnig stolz auf mich :-)
Jetzt möchte ich diesem Programm eine Oberfläche geben, damit ich es vorzeigen kann. ALso mir würde echt ne html Seite reichen.
Aber wir haben Applets nur einma im Präsenzunterricht angegroffen, und das wars, ich werd aus learning by doing nicht schlau. Meine Methoden des Programms geben auf einer Konsole immer schöne Strings aus, diese möchte ich nun im Applet auch ausgeben lassen. Aber ich komm nicht darüber hinaus, dass BlueJ mir sagt "String sei nicht möglich hier" oder "void geht nicht" - er will immer auf return hinaus.
Womit kann ich eine Methode nach Buttonklick aufrufen lassen, in der sich nach und nach ein paar Strings mit Ergebnissen befinden, die einfach in ein Feld ausgedruckt werden sollen?
:o


Gruß
Commodore

Berufspenner
25-05-2008, 14:03
Moin,

also erstmal willkommen im Forum :)

Nun aber zum Problem. Vielleicht wäre es ganz hilfreich, wenn du einmal konkret das Problem in der Form darstellst, indem du sagst, am besten in Form deines Codes, was du gemach hast und zu welchem Ergebnis es geführt hat. Das erleichtert die Problemlösung ungemein ;)

commodore
25-05-2008, 17:36
Dieser Quellcode steht in der Klasse DNATranslation:

public void E_gibAlleTriplettraus(){
liste2.toFirst();
int zaehler2=0;
while (!liste2.isBehind()) {
zaehler2++;
Triplett naechstestelle=(Triplett) liste2.getItem();
System.out.println( "\nStelle "+zaehler2+" : "+naechstestelle.getAnticodonX()+"---"+naechstestelle.getAminosäure());

liste2.next();

}
liste2.toFirst();

}






und der in einem Textfeld ausgedruckt werden. Nur, Problem ist, ich kann das mit Textfeldern und Webseiten oder ganz lapidar mit GUI nicht. Und als ich mir was zusammengeklaut hatte, gab es folgenden Code im Applet (Was als Website gespeichert werden soll und ich dann jmd zeigen kann):

import java.lang.String;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*
* Freiwillig Applets- und GUI-Grundlagen: Siehe
* http://www.u-helmich.de/inf/BlueJ/lexikon/TextField.html
* http://www.u-helmich.de/inf/BlueJ/lexikon/Button.html
* http://www.u-helmich.de/inf/BlueJ/lexikon/Button1.html
*
*/

public class TranslationHTML extends Applet implements ActionListener
{
Label l1;
TextField t2;
TextField t1;
Button b1;
TextArea ausgabeTA;


DNATranslation translation;

public void init(){
// Baue Grafik auf
setLayout( new GridLayout(4,0) ); // 4 Zeilen
l1 = new Label("Hier steht der Begrüßungstext .");
t2 = new TextField("Die Analyse und Translation .");
t1 = new TextField(20);
b1 = new Button("Ueberpruefe");

ausgabeTA = new TextArea(20, 20);
add(ausgabeTA);
add(l1);
add(t1);
add(b1);
add(t2);
b1.addActionListener(this);
// Baue Quiz auf
translation=new DNATranslation();
l1.setText("Bitte geben Sie im untenstehenden Feld die Abfolge der Codons eines mRNA-Stranges ein. Beachten Sie dabei, dass er nur GROßBuchstaben von A, U, G und C beinhalten darf");
}

public void actionPerformed(ActionEvent event){
if(event.getSource()== b1) pruefe();
}

public void paint(Graphics g){
}

public void pruefe(){
if (b1.getLabel().equals("Ueberpruefe")){
t2.setText(""+(translation.E_gibAlleTriplettraus(t1.getText())) );
b1.setLabel("Beginne Translation");

l1.setText("");
}
else {
ausgabeTA.setText(translation.starteTranslation()) ;
b1.setLabel("Beginne Translation");
t1.setText("");
l1.setText("");
}
}
}




Fehlermeldung: 'void' type not allowed here

Nun ich hatte auch beim rumprobieren mal ne Fehlermeldung bei der gleichen Appletstelle mit einer anderen Methode der "Hauptklasse" die da hieß "E_gibAlleTriplettraus() in DNATranslation cannot be applied to (java.lang.String)" - Da hatte ich ein return statement im Code. Der Quelltext zu dieser großen Methode wäre aber zu unübersichtlich oder zu lang, sie hier zu pasten.
Aber, Berufspenner, vielleicht kannst Du mir ja so schon (grinsend? :-) ) weiterhelfen.



Gruß
Commodore

Born2Burn
31-05-2008, 01:13
Die Methoden setText() von Label und TextField benötigen als Parameter ein Objekt vom Typ String (siehe JavaApi). So wie es sich anhört liefert deine Methode translation.starteTranslation() aber keinen solchen zurück. Ich vermute es handelt sich auch um ein Funktion ohne Rückgabewert (void).

Das "+" in der Anweisung ""+(translation.E_gibAlleTriplettraus(t 1.getText())) ist in diesem Kontext als Concat also Verkettung zu verstehen die nur zwischen 2 Strings zulässig ist (da "" eine leerer String ist). Deine Funktion liefert einen solchen aber nicht zurück. Die Verwendung von System.out.println() schreibt auf die Konsole und liefert keinen String aus der Funktion zurück.

Du solltest deine Funktion(en) also entsprechend anpassen:



public String E_gibAlleTriplettraus(){

StringBuilder st = new StringBuilder();
liste2.toFirst();
int zaehler2=0;

while (!liste2.isBehind()) {


zaehler2++;
Triplett naechstestelle=(Triplett) liste2.getItem();
st.append( "\nStelle "+zaehler2+" : "+naechstestelle.getAnticodonX()+"---"+naechstestelle.getAminosäure());

liste2.next();

}

liste2.toFirst();
return st.toString();
}

BlueJay
02-06-2008, 14:55
Jetzt möchte ich diesem Programm eine Oberfläche geben, damit ich es vorzeigen kann. ALso mir würde echt ne html Seite reichen.
Aber wir haben Applets nur einma im Präsenzunterricht angegroffen, und das wars, ich werd aus learning by doing nicht schlau.

Von Applet-Newbie zu Newbie:
Ein Applet zeichnet auf einen vorher definierten Bereich. Das heisst:
1. im HTML-Teil einen Bereich für das Applet definieren, etwa so:

<applet name=myscreen code=myscreen width="320" height="240" style="background:#000; border:2px outset #ccc">
<param name=param1 value="wattauchimmer">
<param name=param2 value="noch_n Param">
<param name=param3 value="Aller guten Dinge sind 3">
</applet>


2. Das Applet zeichnet auf einen Graphics-Screen, benutzt dabei die Methode paint(). Man braucht die Bibliotheken Applet und awt, eventuell Graphics.

d.h.:


import java.applet.*;
import java.awt.*;
import java.Graphics;

public class myscreen extends Applet
{
//der Einfachheit halber wird nur param1 genommen:
String param1 = this.getParameter("param1");

backgroundfarbe=new Color(0,0,95); // Dunkelblau
foregroundfarbe=new Color(255,255,191); // Hellgelb

public void paint(Graphics g)
{
// Datencheck:
if (param1 == null) param1 = "Parameter 1 nicht erkennbar!;
// Ausgabe:
// Screen loeschen:
g.setColor(backgroundfarbe);
g.fillRect(0,0,320,240);
// Daten raus:
g.setColor(foregroundfarbe);
g.drawString(param1,24,24);
}
}



Mit paint() kann man schöne Sachen machen, es lohnt sich, die Methoden von Graphics genauer anzusehen.

Noch 'nen url für Applets zum Nachlesen:
http://java.sun.com/docs/books/tutorial/deployment/applet/

so long,
BlueJay, die mit der verwendeten Oberfläche BlueJ nix zu tun hat.

BlueJay
02-06-2008, 15:00
war ja doch schon beantwortet, da hat der Cache mich wieder veräppelt :(