2016-05-30 10 views
-2

Ich bin ein Anfänger zu Java und zu dieser Website. Ich habe ein Problem mit einem Applet, das ich in JCreator für die Schule schreibe. Der Maus-Listener funktioniert in Ordnung, der Action-Listener jedoch nicht. Die 'if'- und' else'-Anweisungen im actionlistener sollten dazu führen, dass die Schaltflächen die Hintergrundfarbe ändern, wenn sie angeklickt werden, aber das tun sie nicht ... Jede Hilfe hier wäre willkommen!JAVA: Probleme mit Actionlistener

Danke! (SIEHE CODE UNTEN)

import java.awt.*; 
import java.awt.event.*; 
import java.applet.Applet; 

public class MilestoneTwo extends Applet 
         implements MouseListener, ActionListener { 

private int x = 50, y = 50; 

int n = 10; 
Color[] rainbow; 
int c = 0; 
Button redButton; 
Button blueButton; 
Button greenButton; 
int r = 50; 
int g = 50; 
int b = 50; 




    public void init() { 


    redButton = new Button ("MAKE BG MORE RED"); 
    blueButton = new Button ("MAKE BG MORE BLUE"); 
    greenButton = new Button ("MAKE BG MORE GREEN"); 
add (redButton); 
    redButton.addActionListener (this); 
add (blueButton); 
    blueButton.addActionListener (this); 
    add (greenButton); 
    greenButton.addActionListener (this); 





// RGB ARRAY 
rainbow = new Color[ n ]; 

//loading array cells with colours 

rainbow[ 0 ] = new Color(90, 150, 110); 
rainbow[ 1 ] = new Color(50, 250, 100); 
rainbow[ 2 ] = new Color(250, 200, 10); 
rainbow[ 3 ] = new Color(4, 60, 123); 
rainbow[ 4 ] = new Color(230, 70, 15); 
rainbow[ 5 ] = new Color(20, 30, 230); 
rainbow[ 6 ] = new Color(255, 35, 179); 
rainbow[ 7 ] = new Color(110, 10, 40); 
rainbow[ 8 ] = new Color(r, g, b); 





    // Registering MouseListener 
    addMouseListener(this); 

} 


public void paint(Graphics g) { 

    //if statements for circle colour 



    setBackground(rainbow[ 8 ]); 

    if (c == 0){ g.setColor(rainbow[ 0 ]); 
    } 
    else if (c==1){ g.setColor(rainbow[ 1 ]); 
    } 

    else if (c==2){ g.setColor(rainbow[ 2 ]); 
    } 

    else if (c==3) { g.setColor(rainbow[ 3 ]); 
    } 

    else if (c==4){ g.setColor (rainbow[ 4 ]); 
    } 

    else if (c==5){ g.setColor (rainbow[ 5 ]); 
    } 

    else if (c==6){ g.setColor (rainbow[ 6 ]); 
    } 

    else if (c==7){ ; 
    g.setColor (rainbow[ 7 ]); 
    } 

    g.fillOval(x, y, 75,75); 



    } 


public void actionPerformed(ActionEvent z) { 


    if (z.getSource() == redButton) 
    { 

if (r==250){ 
r=0; 
} 

     else { 
      r = (r+50); 
      } 

     } 

    else if (z.getSource() == blueButton) { 

     if (b==250){ 
      b=0; 
      } 

     else { 
      b = (b+50); 
      } 


} 

    else if (z.getSource() == greenButton) { 

     if (g==250){ 
     g=0; 
     } 

     else { 
     g = (g+50); 
     } 

} 


     repaint(); 
} 






    // what's executed upon click. 
public void mouseClicked(MouseEvent e) { 

    x = e.getX(); 
    y = e.getY(); 

    if (c > 7) { c = 0; //reset of c if needed 
    } 
    else { c = (c+1); 
    } 
    repaint(); 

} 
    // useless methods 

    public void mouseExited(MouseEvent e) { } 

    public void mouseEntered(MouseEvent e) { } 

public void mousePressed(MouseEvent e) { } 

public void mouseReleased(MouseEvent e) { } 




    } 
+0

Ich sehe 'repaint()' Funktion – piyushj

Antwort

0

Sie ändern nie Regenbogen [8] überall aber zu Beginn Ihres Programms. Ändern nur r, g oder b wird nicht magisch ändern die Farbe, sondern Sie müssen Code innerhalb der Aktion Listener schreiben, um die Farbe nach dem Drücken der Taste festgelegt.

Also mit anderen Worten, rufen

rainbow[ 8 ] = new Color(r, g, b); 

am Ende Ihrer Action nach r, g oder b zu ändern.

+0

Will es versuchen! Vielen Dank! – TwelveG

+0

@TwelveG: viel wichtiger als "probier es aus" ist es, die Erklärung dessen zu verstehen, was du falsch machst. Sie gehen davon aus, dass sich jedes Objekt, das zuvor mit diesen Werten konstruiert wurde, auf magische Weise ändert, wenn Sie r oder g oder b ändern, und das wird nicht passieren. Es gibt keine Magie hier und Ihr Programm wird nur das tun, was Sie programmieren. Siehst du, worauf ich hinaus will und warum das wichtig ist? –