2009-07-20 3 views
0

Привет,Как изменить цвет фона в Java-апплета?

До сих пор мой код компилируется, но он меняет белый на черный, а затем не хочет меняться. Supposely это должно измениться с красно-> оранжевый-> зелено-> pink-> сине> черный ..

public void init() { 
    c=new Color[] {Color.red, Color.orange, Color.green, 
        Color.pink, Color.blue, Color.black }; 
    btnNext = new Button("Next Color"); 
    btnNext.addActionListener(this); 
    setLayout(new BorderLayout()); 
    add(btnNext, BorderLayout.SOUTH); 
} 

public void paint(Graphics g) { } 

public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == btnNext) { 
     for(int n=0;n<6;n++) { 
      setBackground(c[n]); 
     } 
    repaint(); 
    } 
} 

Спасибо за вашу помощь.

ответ

1

Что вам нужно сделать, это сохранить переменную-член int текущей позиции в массиве. Затем увеличивайте эту позицию каждый раз, когда вы нажимаете кнопку.

// New int keeping track of background pos 
private int arrPos; 

public void init() { 
    c=new Color[] {Color.red, Color.orange, Color.green, 
        Color.pink, Color.blue, Color.black }; 
    // initialize the int 
    arrPos = 0; 
    btnNext = new Button("Next Color"); 
    btnNext.addActionListener(this); 
    setLayout(new BorderLayout()); 
    add(btnNext, BorderLayout.SOUTH); 
} 

public void paint(Graphics g) { } 

public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == btnNext) { 
     // increment the background 
     arrPos++; 
     if (arrPos >= c.length) arrPos = 0; 
     setBackground(c[arrPos]); 
     repaint(); 
    } 
} 
+0

Если вы переопределите метод paint() с помощью пустого метода, не будет ли апплет не рисоваться вообще после перерисовки? – mjh2007

+0

@ mjh2007I не рекомендовал бы переопределять краску пустым методом. Я просто показывал, что метод рисования не нужно менять для изменения цвета фона. – jjnguy

0

Что происходит, так это то, что вы перебираете все цвета одновременно, каждый раз, когда запускается действие btnNext. Это происходит так быстро, что вы не видите других цветов.

Что бы я сделал, это переменная, которая отслеживает, в какой позиции находится массив, и чтобы эта переменная увеличивалась при следующем нажатии на пользователя, а затем меняет фон на этот цвет. Вы должны избавиться от цикла for внутри вашего actionPerformed.

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