Java8 Swing Изменить цвет кнопки jToggle - PullRequest
0 голосов
/ 24 января 2020

В IntelliJ я использую Java8 и JavaSwing (GUI). У меня есть кнопка jToggle, которую я хочу менять цвета в зависимости от того, нажата она или нет. Я в порядке с формой и изогнутыми углами кнопки, и просто хочу, чтобы в целом c синий цвет кнопки изменился. В настоящее время у меня есть:

laserOnOff.setBackground(Color.GREEN);
laserOnOff.setOpaque(true);
laserOnOff.setBorderPainted(false);

, но это меняет форму кнопки, и когда я переключаю кнопку, только фон текста меняет цвет. Я также пытался

UIManager.put("ToggleButton.select", Color.GREEN);
SwingUtilities.updateComponentTreeUI(laserOnOff);

Но это не сработало. Какой простой способ изменить цвет кнопки jToggle?

(на прикрепленных изображениях я хочу, чтобы кнопка выглядела как кнопка справа, только с зеленым цветом) What the jToggle button looks like if it is selected. jToggle Button not selected

1 Ответ

0 голосов
/ 24 января 2020

Возможно, я неправильно понял ваш вопрос. Тем не менее, вот минимальный пример приложения Swing , который содержит одно JToggleButton. Изначально кнопка имеет белый фон и имеет текст Laser Off . Когда пользователь нажимает кнопку, текст меняется на Laser on , а цвет фона меняется на зеленый. Когда пользователь нажимает кнопку еще раз, текст возвращается к Лазер выключен , а цвет фона также становится белым. Следовательно, кнопка постоянно переключает свой цвет текста и фона при каждой последующей активации кнопки. Я надеюсь, что это поможет вам.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;

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

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class TogglTst implements ActionListener, Runnable {

    @Override // java.lang.Runnable
    public void run() {
        createAndShowGui();
    }

    @Override // java.awt.event.ActionListener
    public void actionPerformed(ActionEvent actnEvnt) {
        Object src = actnEvnt.getSource();
        JToggleButton toggle = (JToggleButton) src;
        if (toggle.isSelected()) {
            toggle.setText("Laser On");
        }
        else {
            toggle.setText("Laser Off");
        }
    }

    private void createAndShowGui() {
        JFrame frame = new JFrame("JSP");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createButtonsPanel(), BorderLayout.PAGE_END);
        frame.setSize(450, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JPanel createButtonsPanel() {
        JPanel buttonsPanel = new JPanel();
        JToggleButton toggle = new JToggleButton("Laser Off");
        toggle.setBackground(Color.WHITE);
        toggle.addActionListener(this);
        buttonsPanel.add(toggle);
        return buttonsPanel;
    }

    public static void main(String[] args) {
        UIDefaults dflts = UIManager.getLookAndFeelDefaults();
        dflts.put("ToggleButton.select", Color.GREEN);
        EventQueue.invokeLater(new TogglTst());
    }
}
...