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.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class black extends JFrame{
black(String titel){
super(titel);
}
boolean initi(){
JButton start = new JButton ("Starten");
add(start);
start.addActionListener( new alisten());
return starten;
}
public class alisten implements ActionListener{
public void actionPerformed(ActionEvent e){
String quelle= e.getActionCommand();
if(quelle.equals ("Starten")){
starten = true;
}
}
}
}
public class blackj{
public static void main(String [] args){
boolean starten = false;
black black1 = new black("Blackjack");
black1.pack();
black1.setVisible(true);
black1.initi();
if(starten == true){
//black1.spielen();
}
}
}
Moin Leute,
hier mal mein Code und dazu mein Problem.
Ich will Blackjack programmieren auf graphischer Oberfläche, und als erstes muss auf den Start-button gedrückt werden um das spiel zu starten.
Wie kann ich dann den Wert starten = true von dem Button an die main() übergeben?
Bei mir kommt immer die Fehlermeldung, dass er die Variable nicht kennt.
Das problem liegt hier sicherlich an der ActionListener die keinen rückgabewert liefert aber ich weiß nicht wie das Problem gelöst werden kann.
Du kannst auf die Variable natürlich nicht zugreifen, weil sie nicht im Gültigkeitsbereich dieser Method ist (sie wurde in der Main deklariert und kann dann natürlich nicht einfach so in einer anderen Klasse bzw. Methode verwendet werden). Ich lasse jetzt einfach mal generell außen vor, dass der Code doch noch sehr, sehr viele Mängel aufweist. Dein Problem kannst du Lösen indem du einen Objekttyp als Variable verwendest und damit die Referenz übergibst:
Java:
Boolean starten = false;
black black1 = new black("Blackjack", starten);
Java:
public class black extends JFrame{
private Boolean starten;
// Constructor
public black(String title, Boolean starten) {
super(title);
this.starten = starten
...
Diese Variante ist aber so hässlich implementiert, deshalb hier die gute Variante:
In deiner black Klasse (übrigens sollten Klassennamen mit einem Großbuchstaben beginnen - per Konvention) deklarierst du eine Variable:
Java:
public class black extends JFrame{
private boolean started = false;
...
Dann setzt du im ActionListener den Wert von started auf true:
Java:
if(quelle.equals ("Starten")){
started = true;
}
Außerdem bietest du in der Klasse (black) nach außen hin (public) eine getter Methode an, um den Wert auslesen zu können:
Java:
public boolean isStarted() {
return started;
}
In der Main machst du dann:
Java:
boolean starten = false;
black black1 = new black("Blackjack");
black1.pack();
black1.setVisible(true);
black1.setModal(true); // Neu
black1.initi();
Es wäre außerdem wichtig, den Dialog modal zu machen (d.h. er bekommt den Fokus und der Main-Thread muss warten). Ansonsten wird der Dialog geöffnet und die if direkt danach geprüft und es wird immer false rauskommen.