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();
    }
}
 

javampir

Bekanntes Mitglied
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
 

javampir

Bekanntes Mitglied
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);
        }
    }
}
 

javampir

Bekanntes Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
A Layoutwechsel über RadioButtons AWT, Swing, JavaFX & SWT 3
A Panelwechsel durch RadioButtons AWT, Swing, JavaFX & SWT 1
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B JavaFX RadioButtons aus ToggleGroup löschen AWT, Swing, JavaFX & SWT 7
B JavaFX RadioButtons erstellen AWT, Swing, JavaFX & SWT 7
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
Java-Insel AWT RadioButtons unauswählbar machen AWT, Swing, JavaFX & SWT 11
E POI und Radiobuttons AWT, Swing, JavaFX & SWT 7
P Swing RadioButtons - nur einen auswählen AWT, Swing, JavaFX & SWT 3
P Swing [Gelöst]Radiobuttons "Verknüpfen" AWT, Swing, JavaFX & SWT 3
J Swing Auf RadioButtons in JPanel zugreifen AWT, Swing, JavaFX & SWT 11
C Value eines RadioButtons ausgeben AWT, Swing, JavaFX & SWT 6
T Umrandung des Textes eines Radiobuttons ändern AWT, Swing, JavaFX & SWT 2
R Swing RadioButtons in JTable einfügen AWT, Swing, JavaFX & SWT 18
F Status von RadioButtons abfragen AWT, Swing, JavaFX & SWT 5
G JOptionePane mit RadioButtons? AWT, Swing, JavaFX & SWT 4
JG12111989 Buttons funktionieren nicht AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Controls in einer BorderPane funktionieren nicht AWT, Swing, JavaFX & SWT 4
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
D VE in Eclipse mag einfach nicht funktionieren AWT, Swing, JavaFX & SWT 5
D KeyEvents funktionieren nicht AWT, Swing, JavaFX & SWT 8
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
Spot84 swt label zeilenumbruch will nicht funktionieren AWT, Swing, JavaFX & SWT 1
L JPanel und ScrollPanel funktionieren nicht AWT, Swing, JavaFX & SWT 3
U BufferedImages funktionieren nicht AWT, Swing, JavaFX & SWT 36
J KeyListener funktionieren nicht AWT, Swing, JavaFX & SWT 13
B ActionListener funktionieren nicht! AWT, Swing, JavaFX & SWT 10
D Scrollbars funktionieren nicht in Tabelle AWT, Swing, JavaFX & SWT 4
S Seltsam: SWT Table zeigt keine Scrollbar an AWT, Swing, JavaFX & SWT 12
T KeyListener reagiert seltsam bei F10 (Systemtasten?) AWT, Swing, JavaFX & SWT 5
M JTree mit eigenem Renderer sieht seltsam aus AWT, Swing, JavaFX & SWT 2
sparrow Tasten mit Umlauten im KeyListener verhalten sich seltsam AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben