Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

CANEHDN

macrumors 6502a
Original poster
Dec 12, 2005
855
0
Eagle Mountain, UT
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

macrumors 6502a
Jun 17, 2003
873
3
CANEHDN said:
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.)

Code:
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();
	}

}
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.