Button changing colors in Java

Discussion in 'Mac Programming' started by CANEHDN, Feb 15, 2006.

  1. macrumors 6502a

    CANEHDN

    Joined:
    Dec 12, 2005
    Location:
    Eagle Mountain, UT
    #1
    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.
     
  2. macrumors 6502a

    Joined:
    Jun 17, 2003
    #2
    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();
    	}
    
    }
    
     
  3. thread starter macrumors 6502a

    CANEHDN

    Joined:
    Dec 12, 2005
    Location:
    Eagle Mountain, UT
    #3
    Thanks for the help. This is what I needed.
     

Share This Page