2016-05-30 4 views
-2

Я новичок в Java и на этом сайте. У меня проблема с апплетом, который я пишу в JCreator для школы. Мозгоуловитель работает нормально, но у исполнителя действий нет. Операции «if» и «else» в actionlistener должны заставить кнопки менять цвет фона при нажатии, но они не ... Любая помощь здесь будет оценена!JAVA: возникли проблемы с Actionlistener

Спасибо! (СМ. КОД НИЖЕ)

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

i can not see 'repaint()' function – piyushj

ответ

0

Вы никогда не изменяете радугу [8] нигде, кроме как в начале вашей программы. Просто изменение r, g или b не изменяет магический цвет, а вместо этого вы должны написать код внутри прослушивателя действий, чтобы установить цвет после нажатия кнопки.

Итак, другими словами, вызовите

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

в конце вашего ActionListener после изменения г, г или б.

+0

Попробуем! Благодаря! – TwelveG

+0

@TwelveG: гораздо важнее, чем «дать ему попробовать», - это понять, что вы делаете неправильно. Вы предполагаете, что, изменив r, или g или b, любой объект, ранее построенный с этими значениями, волшебным образом изменится, и этого не произойдет. Здесь нет никакой магии, и ваша программа будет делать только то, что вы ее кодируете. Вы видите, что я получаю, и почему это важно? –

 Смежные вопросы

  • Нет связанных вопросов^_^