Swing RadioButtons funktionieren seltsam

Hallo liebe Community,

meine Frage bezieht sich auf die Schlaufen. So funktioniert alles, die RadioButtons werden nacheinander zur Auswahl aktiviert. Wenn ich jedoch bei den Schlaufen jeweils das

Java:
System.out.println("");

entferne, funktioniert das ganze nicht mehr. Nun bleibt meine Frage: Wieso?

Java:
package TicTacToe;

import java.awt.Color;

public class game
{
    public static void initialize()
    {
        buttons.toggle(false, "both", Color.GRAY);
  
        frame.rdbtnP1.setEnabled(false);
        frame.rdbtnP2PC.setEnabled(false);
        frame.btnStart.setEnabled(false);
      
      
        while(true)
        {
            System.out.println("");
            if(frame.rdbtnPVP.isSelected() || frame.rdbtnPVE.isSelected())
            {
                frame.rdbtnP1.setEnabled(true);
                frame.rdbtnP2PC.setEnabled(true);
          
                break;
            }
        }
      
        while(true)
        {
            System.out.println("");
            if(frame.rdbtnP1.isSelected() || frame.rdbtnP2PC.isSelected())
            {
                frame.btnStart.setEnabled(true);
          
                break;
            }
        }
      
    }
  
    public static void execute()
    {
        buttons.toggle(true, "p1", frame.p1);
        buttons.toggle(true, "p2pc", frame.p2);
    }
  
    public static void reset()
    {
        output.clearfield();
    }
}
 
hi,
du hast wahrscheinlich ein timing-problem. wenn deine bedingung falsch ergibt, dann springst du sofort wieder zur bedingung. das kann dann mehrere tausend mal pro sekunde passieren. dein println verschafft ein wenig zeit für die elemente zu "reagieren". Du könntest wahrscheinlich mit Thread.sleep arbeiten.
allerdings würde ich hier niemals aktiv warten, das kostet einen haufen rechenzeit. ich denke, du solltest es lieber mit einem ItemListener probieren.
außerdem ist bei dir ein bisschen viel static, da müsste man noch mal schauen...
javampir
 
wenn du aus einer static-methode (was die main zufällig ist) auf eine andere zugreifst, muss die natürlich static sein. allerdings ist es gängig (und im sinne der objektorientierung), ein objekt anzulegen und auf dieses die methoden anzuwenden.
also (bei großgeschriebenem klassennamen übrigens):
Java:
public static void main(String[] args) {
    Game game = new Game();
    game.initialize();
    game.execute();
}
 
buttons ist eine klasse in der alle buttons aktiviert bzw. deaktiviert werden können:

Java:
package TicTacToe;

import java.awt.Color;

public class buttons
{
    public void toggle(boolean set, String which, Color colour)
    {
        if(which == "p1")
        {
            frame.btn1p1.setEnabled(set);
            frame.btn2p1.setEnabled(set);
            frame.btn3p1.setEnabled(set);
            frame.btn4p1.setEnabled(set);
            frame.btn5p1.setEnabled(set);
            frame.btn6p1.setEnabled(set);
            frame.btn7p1.setEnabled(set);
            frame.btn8p1.setEnabled(set);
            frame.btn9p1.setEnabled(set);   
           
            frame.btn1p1.setBackground(colour);
            frame.btn2p1.setBackground(colour);
            frame.btn3p1.setBackground(colour);
            frame.btn4p1.setBackground(colour);
            frame.btn5p1.setBackground(colour);
            frame.btn6p1.setBackground(colour);
            frame.btn7p1.setBackground(colour);
            frame.btn8p1.setBackground(colour);
            frame.btn9p1.setBackground(colour);
        }
        if(which == "p2pc")
        {
            frame.btn1p2.setEnabled(set);
            frame.btn2p2.setEnabled(set);
            frame.btn3p2.setEnabled(set);
            frame.btn4p2.setEnabled(set);
            frame.btn5p2.setEnabled(set);
            frame.btn6p2.setEnabled(set);
            frame.btn7p2.setEnabled(set);
            frame.btn8p2.setEnabled(set);
            frame.btn9p2.setEnabled(set);
           
            frame.btn1p2.setBackground(colour);
            frame.btn2p2.setBackground(colour);
            frame.btn3p2.setBackground(colour);
            frame.btn4p2.setBackground(colour);
            frame.btn5p2.setBackground(colour);
            frame.btn6p2.setBackground(colour);
            frame.btn7p2.setBackground(colour);
            frame.btn8p2.setBackground(colour);
            frame.btn9p2.setBackground(colour);
        }
        if(which == "both")
        {
            frame.btn1p1.setEnabled(set);
            frame.btn2p1.setEnabled(set);
            frame.btn3p1.setEnabled(set);
            frame.btn4p1.setEnabled(set);
            frame.btn5p1.setEnabled(set);
            frame.btn6p1.setEnabled(set);
            frame.btn7p1.setEnabled(set);
            frame.btn8p1.setEnabled(set);
            frame.btn9p1.setEnabled(set);
           
            frame.btn1p2.setEnabled(set);
            frame.btn2p2.setEnabled(set);
            frame.btn3p2.setEnabled(set);
            frame.btn4p2.setEnabled(set);
            frame.btn5p2.setEnabled(set);
            frame.btn6p2.setEnabled(set);
            frame.btn7p2.setEnabled(set);
            frame.btn8p2.setEnabled(set);
            frame.btn9p2.setEnabled(set);
           
           
            frame.btn1p1.setBackground(colour);
            frame.btn2p1.setBackground(colour);
            frame.btn3p1.setBackground(colour);
            frame.btn4p1.setBackground(colour);
            frame.btn5p1.setBackground(colour);
            frame.btn6p1.setBackground(colour);
            frame.btn7p1.setBackground(colour);
            frame.btn8p1.setBackground(colour);
            frame.btn9p1.setBackground(colour);
           
            frame.btn1p2.setBackground(colour);
            frame.btn2p2.setBackground(colour);
            frame.btn3p2.setBackground(colour);
            frame.btn4p2.setBackground(colour);
            frame.btn5p2.setBackground(colour);
            frame.btn6p2.setBackground(colour);
            frame.btn7p2.setBackground(colour);
            frame.btn8p2.setBackground(colour);
            frame.btn9p2.setBackground(colour);
        }
    }
}
 
ich glaube ich habe verstanden. ich habe gedacht, frame sei eine instanzvariable, aber es ist eine klasse. klassennamen immer groß!! am besten gehst du mal durch deinen ganzen code und haust das static überall raus (bis auf main natärlich). aus der main heraus erzeugst du eine instanz der klasse fnester und von dort aus deklarierst, initialisierst und verwaltest du die elemente (auch die buttons) und anderen klassen. deine klasse buttons fällt dann weg, das ist eine normale methode in der oberflächenverwaltung.
javampir
 

Zurück
Oben