Как я могу изменить переменную цвета?

Я пытаюсь в настоящее время сделать JFrame и когда пользователь нажимает кнопку, круг, который отображается в JFrame меняет цвет каждую секунду. Но в данный момент у меня возникают проблемы с изменением цвета, который в данный момент отображается в окне, хранящемся в переменной.

Color lastColor = Color.ORANGE;            
g.setColor(lastColor);

smallerButton.addActionListener(new ActionListener()
{
      public void actionPerformed(ActionEvent e)
      {
            String action = e.getActionCommand();
            if (action.equals("Flash")) {

                  //when clicked change color of the circle listed above.
                  //or change the variable of last color.
            }
      }});
     }
};

Это не весь код. Все, что я пытаюсь сделать, это когда пользователь нажимает кнопку переменной lastColor затем изменяется, чтобы сказать GRAY, У меня возникают проблемы при попытке сделать это, так как когда я помещаю имя переменной в слушатель действия, он не может найти переменную lastColor перейти на новую переменную. Как я могу изменить переменную lastColor в действии слушатель?

2 ответа

Вы должны объявить lastColor как переменная-член вашего класса. Вы создаете его локально, и поэтому clickListener не может его увидеть.

РЕДАКТИРОВАТЬ:

public class foo(){
Color lastColor;

public foo(){
lastColor = Color.ORANGE();
}

public void paintFoo(){
 // do your paint stuff here and access lastColor
}

}

Вам просто нужно создать одну переменную экземпляра как:

private Color backColor;

И по щелчку JButtonпросто вызовите метод, который изменит значение этой переменной, и вызовите repaint (), для вида изменить цвет нарисованного круга.

Вот небольшой пример:

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

public class ColourExample {

    private JPanel drawingBoard;
    private JButton button;
    private JPanel customPanel;

    private static final int GAP = 5;

    private Color [] colours = {
        Color.red,
        Color.blue,
        Color.cyan,
        Color.magenta,
        Color.gray
    };
    private int counter;

    public ColourExample () {
        counter = 0;
    }

    private void displayGUI () {
        JFrame frame = new JFrame ( "" );
        frame.setDefaultCloseOperation ( JFrame.DISPOSE_ON_CLOSE );

        JPanel contentPane = new JPanel ();
        contentPane.setLayout ( new BorderLayout ( GAP, GAP) );

        customPanel = new CustomPanel ();
        contentPane.add ( customPanel, BorderLayout.CENTER );

        button = new JButton ( "Change Colour" );
        button.addActionListener ( new ActionListener () {
            @Override
            public void actionPerformed ( ActionEvent ae ) {
                System.out.println ( "Counter: " + counter );
                ( ( CustomPanel ) customPanel ).setValues ( colours [ counter++ ] );
                counter %= colours.length;
            }
        } );
        contentPane.add ( button, BorderLayout.PAGE_END );

        frame.setContentPane ( contentPane );
        frame.pack ();
        frame.setLocationByPlatform ( true );
        frame.setVisible ( true );
    }

    public static void main ( String [] args ) {
        Runnable runnable = new Runnable () {
            @Override
            public void run () {
                new ColourExample ().displayGUI ();
            }
        };
        EventQueue.invokeLater ( runnable );
    }
}

class CustomPanel extends JPanel {

    private static final int WIDTH = 400;
    private static final int HEIGHT = 400;
    private static final int RADIUS = 400;

    private Color backColour;

    public CustomPanel ( ) {
        setOpaque ( true );
        backColour = Color.green;       
    }

    public void setValues ( Color backColour ) {
        this.backColour = backColour;
        repaint ();
    }

    @Override
    public Dimension getPreferredSize () {
        return new Dimension ( WIDTH, HEIGHT );
    }

    @Override
    protected void paintComponent ( Graphics g ) {
        super.paintComponent ( g );
        g.setColor ( backColour );
        g.fillOval ( 0, 0, RADIUS, RADIUS );
    }
}
Другие вопросы по тегам