0

Here are my code where I implemented one button has named "start/stop"

  • When I press button once, I got stop as a text on button, but my button colour was not change. When I second time press this button, I got start as a new name of button and got green colour on it. How can I set a red colour when the text on the button is "stop"?

Here is my code.....

//Buttons for start and stop 
btnStartStop = new JToggleButton("Start/Stop");
//btnStartStop.setEnabled(false);
btnStartStop.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (chk_start) {
              tout_textPane.setText("Stop Magnetic Levitation Project");
              btnStartStop.setText("start");
              btnStartStop.setBackground(new Color(170, 255, 0));
              btnStartStop.setForeground(Color.WHITE);
              btnStartStop.setSelected(false);
              CommandHandler(".plot");
              chk_start = false;
          } else {
                 tout_textPane.setText("Starting Magnetic Levitation Project");
                 btnStartStop.setText("stop");
                 btnStartStop.setBackground(Color.RED);
                 btnStartStop.setForeground(Color.WHITE);
                 btnStartStop.setSelected(true); 
                 chk_start = true;
              }
        CommandHandler(".isr");
        }
    });
btnStartStop.setBounds(27, 10, 210, 21);
panel_ctrl_i.add(btnStartStop);
  • Add `btnStartStop.setBorderPainted(false);`, you may also need `btnStartStop.setOpaque(false)`, but you're not going to like the result – MadProgrammer Apr 25 '22 at 21:42
  • Thank you for your answer, but I'm not sure where should I have to add this command? Can you please a bit elaborate? – Kishan Paladiya Apr 25 '22 at 21:51
  • Add when you create the instance of the `JToggleButton` - also, search for "JButton change background color" as it's the same problem – MadProgrammer Apr 25 '22 at 21:59
  • I tried both command btnStartStop.setBorderPainted(false); btnStartStop.setOpaque(false); But still not working – Kishan Paladiya Apr 25 '22 at 22:09

1 Answers1

0

I tried both command btnStartStop.setBorderPainted(false); btnStartStop.setOpaque(false); But still not working

Works fine for me, and no, you don't seem to be able to get rid of the "selected" highlight, this is something controlled by the look and feel and that's a whole other mess

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            GradientButton btn = new GradientButton();
            btn.setOpaque(true);
            btn.setBorderPainted(false);
            btn.setBackground(Color.RED);
            add(btn);

            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (btn.isSelected()) {
                        btn.setBackground(Color.GREEN);
                    } else {
                        btn.setBackground(Color.RED);
                    }
                }
            });
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.dispose();
        }

    }

    private static class GradientButton extends JToggleButton {
        private GradientButton() {
            super("Gradient Button");
            setContentAreaFilled(false);
            setFocusPainted(false); // used for demonstration
        }

        @Override
        protected void paintComponent(Graphics g) {
            final Graphics2D g2 = (Graphics2D) g.create();
            g2.setPaint(new GradientPaint(
                    new Point(0, 0),
                    Color.WHITE,
                    new Point(0, getHeight()),
                    Color.PINK.darker()));
            g2.fillRect(0, 0, getWidth(), getHeight());
            g2.dispose();

            super.paintComponent(g);
        }
    }
}

You should also do a search on jbutton change background as it's basically the same problem

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
  • Thank you brother for your solution. Using this 2 different command, my button colour now changes `.setContentAreaFilled(False);` `.setOpaque(true);` – Kishan Paladiya Apr 25 '22 at 22:43