Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
bin gerade an meinem ersten Java Projekt und scheitere ein wenig an den ActionListenern.
Bei klick auf einen Button wird folgende actionPerformed Methode ausgeführt:
Code:
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
Wuerfel wuerfel = new Wuerfel();
int x = wuerfel.wuerfeln();
}
Den Wert der Variable x brauche ich als Rückgabe. Leider hat die Methode ja aber keinen Rückgabewert Wie übergebe ich mein x? Hat irgendjemand eine Idee?
Was willst du denn anschließend mit dem x machen? Wenn du irgend eine Verarbeitung damit anstoßen willst musst du innerhalb der actionPerformed Methode deine Verarbeitung mit dem x aufrufen.
Beschreib einfach was du genau machen willst, wenn der Button gedrütckt wurde
Jedes Mal neue Würfel zu erzeugen ist gar nicht nötig. Du kaufst dir ja auch nicht vor jedem Würfeln ein neues Mensch-Ärger-Dich-Nicht-Spiel. Rufe in der actionPerformed()-Methode am besten eine Methode
Code:
private void wuerfeln() {
}
auf, in der du dann per Zufall die gewürfelten Augen bestimmst.
Der Wert lässt sich dann bspw. in eine andere Methode übergeben oder in einer Instanzvariablen speichern.
das klingt natürlich logisch. Ich rufe also nur die Methode wuerfeln() auf. Ich möchte den Wert x letztendlich in der Gui Klasse ausgeben. Vorher führe ich innerhalb der actionPerformed Methode mit x noch einige Rechnungen durch. Nur wie kriege ich das x letztendlich in die Gui Klasse?
Indem du in der GUI Klasse eine Methode hast die z.B setMyX heißt (setX würde ich nicht nehmen, da diese Methode von vielen GUI Klassen bereits benötigt wird). Dieser Methode setzt du den Wert und zeigst ihn in deinem Label an. Die GUI Klasse muss natürlich bekannt sein (als Attribut über den Konstruktor setzen)
Ah jetzt verstehe ich dich. Aber sollte ich die actionPerformed Methode nicht lieber in eine eigene Klasse packen? Von wegen Trennung von Gui und Programmlogik?
Kann ich das Ergebnis auch irgendwie in einen int verpacken? Also so das ich nicht ein Objekt vom Typ jlValue, sondern zum Schluss einen int habe?
Echt klasse wie einem hier geholfen wird!
Danke Alex
Hmm ich bin hier immer noch am Knabbern. Ich brauche die Ausgabe definitiv als int. Das kann doch nicht so schwierig sein. Kann ich nicht einfach irgendwie eine Methode anstoßen, die mir dann einen int zurückgibt?
Finde das von den Java Entwicklern irgendwie nicht besonders gut gelöst!
jlValue ist ein JLabel in der GUI, der nur den Wert ausgibt. Natürlich kannst du den Wert den du hast weiter verarbeiten wie du willst. Du kannst auch eine eigene Klasse mit der actionPerformed Methode machen.
Vielleicht hilft dir ja das weiter:
Code:
public MainFrame extends JFrame{
private JLabel jlValue = null;
private JButton jbCalc = null;
public MainFrame(){
super("Mein Titel");
guiInit();
pack();
setLocationRelativeTo(null);
}
private void guiInit(){
jlValue = new JLabel("Ergebnis: ");
jbCalc = new JButton("Calculate");
jbCalc.addActionListener(new ActionHandler(this));
Container cont = getContentPane();
cont.add(jlValue);
cont.add(jbCalc);
}
public void setValueFromDice(int value){
jlValue.setText("Ergebnis: " + x);
}
}
public class ActionHandler implements ActionListener{
private MainFrame gui = null;
public ActionHandler(MainFrame gui){
this.gui = gui;
}
public void actionPerformed(ActionEvent e){
wuerfeln();
}
private void wuerfeln(){
int x = holeInt();
//du kannst hier natürlich noch alles mögliche mit x machen! setValueFromDice zeigt den Wert nur in der GUI an!
gui.setValueFromDice(x);
}
//Diese Methode liefert dir jetzt dein int!
private int holeInt(){
int x = (int)(Math.random() * 100);
return x;
}
vielen Dank für deine Hilfe. Sitze leider immer noch am gleichen Problem und muss glaube ich etwas weiter ausholen um mein Problem zu beschreiben.
Ich versuche mich gerade an einem kleinen Gesellschaftsspiel.
Meine Gui Klasse stellt das Spielbrett und die Spielfiguren dar. Klickt nun einer auf den Button Würfeln, werden in der ActionPerformed Methode einige Berechnungen ausgeführt. Das klappt alles auch wunderbar. Letztendlich kommt ein int Wert als Ergebnis raus. Diesen brauche ich nun in der Gui Klasse um festzulegen an welcher Position die Spielfigur nach dem Wurf dargestellt werden soll. Dazu nutze ich das GridBagLayout.
Ich brauche diesen umbedingt in der Gui Klasse, sonst kann ich nicht auf den Layoutmanager zurückgreifen.
Java ist schon echt hart......
Vielleicht sollte man sowas ja auch komplett anders lösen.
Genau das hab ich doch oben schon gezeigt. Du brauchst in der Klasse wo die actionPerformed Methode implementiert ist die Referenz auf die GUI-Klasse. Wenn du deine Berechnungen durchgeführt hast kannst du der GUI-Klasse den neuen Wert übergeben. Die GUI-Klasse muss dann irgendwas mit dem neuen Wert machen. Diese wäre in dem Fall von meiner Klasse "gui.setValueFromDice(x);"
Ich sage nur danke, danke, danke!
Jetzt funktioniert es endlich. Musste mich erstmal in deinen Quellcode vertiefen. Ein wenig anders, als in meinem Lehrbuch...