PDA

View Full Version : Button changing colors in Java




CANEHDN
Feb 15, 2006, 11:41 PM
I am a student and I'm having a hard time figuring out how to make it so when you press a button the color of the button will change. It would cycle through 5 different colors. Any ideas would be much appreciated.



mrichmon
Feb 16, 2006, 12:50 AM
I am a student and I'm having a hard time figuring out how to make it so when you press a button the color of the button will change. It would cycle through 5 different colors. Any ideas would be much appreciated.

The default User Interface look and feel on OS X does not allow you to change the background color of buttons since OS X buttons in native applications generally have a white background. The default UI look and feel is designed to match the OS X interface look as much as possible.

The sample code below does precisely what you are asking about. Change the flag "USE_CROSS_PLATFORM_UI" to "true" and compile and run the code to see the different look and feels.

(Ignore the coding style ... I just threw it together to illustrate the original question.)


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class ButtonDemo extends JPanel implements ActionListener {

private static boolean USE_CROSS_PLATFORM_UI = false;

int buttonLabelIndex = 0;
String buttonLabels[] = { "Blue", "Cyan", "Green", "Magenta", "Orange", "Pink", "Red", "Yellow" };
Color buttonColors[] = { Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW};
JButton button;

public ButtonDemo() {
super(new BorderLayout());

button = new JButton(buttonLabels[buttonLabelIndex]);
// In the default UI look and feel you cannot easily alter the background color
// for buttons since it is designed to match the OS X UI.
if(USE_CROSS_PLATFORM_UI) {
button.setBackground(buttonColors[buttonLabelIndex]);
} else {
button.setForeground(buttonColors[buttonLabelIndex]);
}

button.addActionListener(this);
this.add(button, BorderLayout.CENTER);

this.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}

public void actionPerformed(ActionEvent e) {
buttonLabelIndex = ++buttonLabelIndex < buttonLabels.length?buttonLabelIndex:0;

button.setText(buttonLabels[buttonLabelIndex]);

if(USE_CROSS_PLATFORM_UI) {
button.setBackground(buttonColors[buttonLabelIndex]);
} else {
button.setForeground(buttonColors[buttonLabelIndex]);
}
}


private static void run() {
if(USE_CROSS_PLATFORM_UI) {
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}

JFrame frame = new JFrame("Button Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JComponent contentPane = new ButtonDemo();
contentPane.setOpaque(true);

frame.setContentPane(contentPane);
frame.pack();

frame.setVisible(true);
}

public static void main(String[] args) {
run();
}

}

CANEHDN
Feb 16, 2006, 10:30 AM
Thanks for the help. This is what I needed.