1. Welcome to the new MacRumors forums. See our announcement and read our FAQ

Button changing colors in Java

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

  1. macrumors 6502a

    CANEHDN

    #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

    #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. macrumors 6502a

    CANEHDN

    #3
    Thanks for the help. This is what I needed.
     

Share This Page