Guiprogrammierung

dariusberlin

Mitglied
Hallo, ich bin grade dabei Java zulernen. Es geht um folgende Übungsaufgabe aus dem Gailer-net Tutorial Aufgabe 5. Ich finde die Lösung nicht. Kann mir jemand helfen und erklären was falsch ist?
Gruss

Kapitel 59 Programmieraufgaben




Java:
 import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import java.util.Random ;
/**
 *
 * Aufgabe 2, Kapitel 59
 */
public class Zahlenschloss {
    private final Color farben;
    private final JFrame frame;
    int index;
    
    public Zahlenschloss() {
	 farben = Color.red;
 
         
        frame = new JFrame("Zahlenschloss");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
 	frame.getContentPane().setBackground(Color.white);
      
 	//Erzeuge Button
        final ColorActionListener cal = new ColorActionListener();
 	JButton btn = new JButton("Option 1");
        btn.setPreferredSize(new Dimension(100, 25));
        btn.addActionListener(cal);
        frame.add(btn);
        
        JButton btn2=new JButton("Option 2");
        btn2.setPreferredSize(new Dimension(100,25));
        btn2.addActionListener(cal);
        frame.add(btn2);
        
        JButton btn3=new JButton("Option 3");
        btn3.setPreferredSize(new Dimension(100,25));
        btn3.addActionListener(cal);
        frame.add(btn3);
        
        JButton btn4=new JButton("Option 4");
        btn4.setPreferredSize(new Dimension(100,25));
        btn4.addActionListener(cal);
        frame.add(btn4);
        
        JButton btn5=new JButton("Option 5");
        btn5.setPreferredSize(new Dimension(100,25));
        btn5.addActionListener(cal);
        frame.add(btn5);
        
        JButton btn6=new JButton("Option 6");
        btn6.setPreferredSize(new Dimension(100,25));
        btn6.addActionListener(cal);
        frame.add(btn6);
        
        JButton btn7=new JButton("Option 7");
        btn7.setPreferredSize(new Dimension(100,25));
        btn7.addActionListener(cal);
        frame.add(btn7);
        
        JButton btn8=new JButton("Option 8");
        btn8.setPreferredSize(new Dimension(100,25));
        btn8.addActionListener(cal);
        frame.add(btn8);
        
        JButton btn9=new JButton("Option 9");
        btn9.setPreferredSize(new Dimension(100,25));
        btn9.addActionListener(cal);
        frame.add(btn9);
        
        JButton btn10=new JButton("Option 10");
        btn10.setPreferredSize(new Dimension(100,25));
        btn10.addActionListener(cal);
        frame.add(btn10);
 
        //Setzte Background und Größe des Contentpanel (Setzt größe der Frame von innen herraus nicht an den außen Kanten)
        frame.getContentPane().setPreferredSize(new Dimension(300, 200));
 
        //Größe und Position automatisch anpassen
        frame.pack();
        
    }
 
    public JFrame getFrame() {
        return frame;
    }
 
    private class ColorActionListener implements ActionListener {
 
    
        @Override
        public void actionPerformed(ActionEvent e) {
           
            
          
       	frame.getContentPane().setBackground(farben);
            
        	
            }
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Zahlenschloss window = new Zahlenschloss();
                window.getFrame().setVisible(true);
            }
        });
    }
}
 

Foxei

Bekanntes Mitglied
Hallo dariusberlin,
es erfreut mich sehr das du meine Kritik von letzten mal umgesetzt hast :D
Ich habe jetzt nun noch eine Sache an deinen Code auszusetzen.

10 Buttons zu erzeugen für eine Reihe von ähnlichen Buttons ist nicht Sinnvoll. Hier ist eine Schleife Sinnvoller.

Nun zu deinem Problem:
Zum UI:
Ich habe das ganze mit einer for Schleife gelöst die 10 Buttons erzeugt und jedem einen ActionCommand passend zu seiner Nummer setzten. Also Button eins hat ActionCommand "1", Buttons zwei hat ActionCommand "2" usw. als ActionListener habe ich wie du auch die Hauptklasse verwendet.
Zur Logik:
Am Anfang erzeuge ich ein Array mit drei Zahlen und einen int um die Position an welche stelle wir im Array sind zu speichern.
Im ActionListener gibt es dann 3 Fälle die beachtet werden müssen. Stimmt die Zahl im ActionCommand des Buttons mit der Zahl aus der Position des Arrays überein zählen wir die Position ein Hoch und setzten den Hintergrund Gelb um zu Signalisieren das der Code erkannt wurde aber nicht vollständig ist.
Und wenn die Zahl nicht übereinstimme setzten wir die Position auf 0 zurück und den Hintergrund auf Rot.
Und wenn sie übereinstimmen und das ende des Arrays erreicht ist setzten wir die Position auf 0 und den Hintergrund Grün.

Das ist die Lösung in Schrift form wenn du trotzdem nicht zu deiner Lösung kommst habe ich hier die Lösung für dich versteckt :D

Gruß Simon

Kombination.java
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

/**
 *
 * @author Simon Schäfer <simon.schaefer@teamkoeln.com>
 */
public class Kombination implements ActionListener{

    private final JFrame frame;
    private final int[] zahlen;
    private int position=0;

    public Kombination() {
        //Eezeugen Farben array
        zahlen = new int[]{2, 7, 5};

        //Erzeuge Frame man Erbt nicht von einer JFrmae sollange man sie nicht wirklich erweitert.
        frame = new JFrame("Kombination");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        //Erzeuge Button
        for (int i = 0; i < 10; i++) {
            JButton btn = new JButton(i+"");
            //Wichtig
            btn.setActionCommand(i+"");
            btn.setPreferredSize(new Dimension(25, 25));
            btn.setMargin(new Insets(0, 0, 0, 0));
            btn.addActionListener(Kombination.this);
            frame.add(btn);
        }

        //Setzte Background und Größe des Contentpanel (Setzt größe der Frame von innen herraus nicht an den außen Kanten)
        frame.getContentPane().setPreferredSize(new Dimension(300, 200));

        //Größe und Position automatisch anpassen
        frame.pack();
        frame.setLocationRelativeTo(null);
    }

    public JFrame getFrame() {
        return frame;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Button zahl auslesen
        int buttonNummber=Integer.parseInt(e.getActionCommand());
        //Überprüfen ob zahl mit Array positon übereinstimt
        if(buttonNummber==zahlen[position]){
            //Zahl richtig aber nicht komplett Task
            position++;
            frame.getContentPane().setBackground(Color.YELLOW);
             //Zahl richtig und komplett Task
            if(position==3){
                frame.getContentPane().setBackground(Color.GREEN);
                position=0;
            }
        }else{
             //Zahl nicht richtig Task
            frame.getContentPane().setBackground(Color.RED);
            position=0;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Kombination window = new Kombination();
                window.getFrame().setVisible(true);
            }
        });
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Guiprogrammierung AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben