Как я могу изменить переменную цвета?
Я пытаюсь в настоящее время сделать 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 );
}
}