Guiprogrammierung

dariusberlin

Mitglied
Hallo es handelt sich hierbei um gailer-net.de tutorial Kapitel 59 Aufgabe 2. Vielleicht kann mir jemand helfen diese Aufgabe zu lösen. Ich weiß nicht wie. Und das ganze vielleicht auch mit einer Erklärung. Ich bin noch Javaanfänger.
Grüße


Java:
 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public  class Farbkreis extends JFrame implements ActionListener
{
  JButton rotButton ;
   

  // Konstruktor für ZweiButtons
  public Farbkreis(String title)
  {
    super( title );

    rotButton = new JButton("Farbkreis");
    
  
     

    // register the buttonDemo frame
    // as the listener for both Buttons.
    rotButton.addActionListener( this );
     

    setLayout( new FlowLayout() );
    add( rotButton );
     

    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  }

  public void actionPerformed( ActionEvent evt)
  {
    // überprüfen, welcher Befehlsstring gesendet wurde
      if ( evt.getActionCommand().equals( getBackround() ) )
	      getContentPane().setBackground(  Color.red  ) ;
	    else
	      getContentPane().setBackground( Color.green ) ;

   

    repaint();
  }
public  Color getBackround() {
    return this.getBackround();
    
}
   

  public static void main ( String[] args )
  {
    Farbkreis demo  = new Farbkreis( "Farbkreis");  
    demo.setSize( 200, 150 );
    demo.setVisible( true );
    demo.getBackground();
    System.out.print(demo.getBackground());
 

Foxei

Bekanntes Mitglied
Hallo dariusberlin,
erstmal wenn du Hilfe benötigst dann Poste bitte die Aufgabe oder zumindest einen Link dazu. Warum sollen wir uns die Mühe machen nach deiner Aufgabe zu suchen wenn du unser Hilfe möchtest.

Aufgabe hat gesagt.:
Schreiben Sie ein Programm, dass nur einen Button in dem Frame hat. Das Anklicken des Buttons kreist durch die Farben: rot --> grün --> blau --> grau --> rot und so weiter. Je Klick wird eine Farbe geändert. Zusätzlich zur setBackground( Color.color ) Methode, die wir verwendet haben, werden Sie die Color getBackground() Methode brauchen, um die aktuelle Farbe zu bekommen.

Eine andere Möglichkeit das zu tun (ein etwas umständlicherer Weg), ist die Verwendung einer Instanzvariablen (vom Typ Color) im Frame, um die aktuelle Farbe zu halten.

Zudem möchte ich an deinem Code einige Punkte Anmerken:
Man erbt nicht von Klassen die man nicht tatsächlich erweitert. Also in deinem Fall die JFrame.

Man setzt niemals die Größe eine JFrame mit der Methode setSize() da dies die Größe der Frame am äußeren Rand bestimmt und die Dekoration einer JFrame je nach LookAndFeel abweichend ist.

Die Methode setVisible(true) wird immer erst ganz am Ende ausgeführt.

Methoden die dinge auf einer JFrame ändern sollten im EventDispatch Thread laufen. (Die modernen LookAndFeels verzeihen es dir zwar aber wenn du welche wie das Substance LookAndFeel vernwendest geht die nicht mehr.)

Man startet sein Programm zwar aus der main Methode aber der eigentliche Programm Ablauf sollte so wenig static enthalten wie möglich.


Nun Aber zu deinem Problem ich habe das Ganze gelöst in dem ich ein Array mit Farben erzeugt habe und dieses hab durchgehen lassen. Bei jedem Klick einen weiter und am Ende wieder zur Farbe an Position 0.

Der Code liegt hier wenn du dich insperieren lassen willst. Damit du es vielleicht erstmal selbst versuchst habe ich ihn versteckt.

Farbenkreis.java
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;

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

    private final JFrame frame;
    private final Color[] farben;

    public Farbkreis() {
        //Eezeugen Farben array
        farben = new Color[]{Color.RED, Color.GREEN, Color.BLUE, Color.GRAY};
        
        //Erzeuge Frame man Erbt nicht von einer JFrmae sollange man sie nicht wirklich erweitert.
        frame = new JFrame("Farbenkreis");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        //Erzeuge Button
        JButton btn = new JButton("Click");
        btn.setPreferredSize(new Dimension(100, 25));
        btn.addActionListener(new ColorActionListener());
        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().setBackground(farben[0]);
        frame.getContentPane().setPreferredSize(new Dimension(300, 200));
        
        //Größe und Position automatisch anpassen
        frame.pack();
        frame.setLocationRelativeTo(null);
    }

    public JFrame getFrame() {
        return frame;
    }

    private class ColorActionListener implements ActionListener {

        private int lastIndex = 0;

        @Override
        public void actionPerformed(ActionEvent e) {
            //Verkürtzte if else
            //Wenn lastIndex+1 größer als das Array lang dann soll er lastIndex wieder auf 0 setzten. 
            //Wenn nicht zählt er die Variable lastIndex um eins hoch
            lastIndex = lastIndex + 1 == farben.length ? 0 : lastIndex + 1;
            frame.getContentPane().setBackground(farben[lastIndex]);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Farbkreis window = new Farbkreis();
                window.getFrame().setVisible(true);
            }
        });
    }
}

Gruß Simon
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Guiprogrammierung AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben