【问题标题】:Java8 Swing Change Color of jToggle ButtonJava 8 Swing 更改 jToggleButton 的颜色
【发布时间】:2020-05-10 09:00:25
【问题描述】:

在 IntelliJ 中,我使用的是 Java8 和 JavaSwing (GUI)。我有一个 jToggle 按钮,我想根据是否单击它来更改颜色。我对按钮的形状和弯角很好,只是想改变按钮的通用蓝色。 我目前有:

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

但这会改变按钮的形状,当我切换按钮时,只有文本的背景会改变颜色。 我也试过了

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

但这没有用。 改变 jToggle 按钮颜色的简单方法是什么?

(在附图中,我希望按钮看起来像右边的那个,只是绿色)

【问题讨论】:

  • 简短的回答是 - 不。绘制的主体是特定于外观的,而不是 Swing 本身
  • @MadProgrammer 你能详细说明一下吗?
  • contentAreaFilled 属性确定平台外观是否绘制任何“附加”内容(花哨的边框和阴影),然而,它很少考虑背景颜色,即填充按钮的其余部分。您可以尝试查看该平台的 ButtonUI,但这会变得一团糟,因为您需要考虑代表的每一个外观和感觉

标签: java swing user-interface button


【解决方案1】:

也许我误解了你的问题。尽管如此,这里有一个Swing 应用程序的minimal example,它包含一个JToggleButton。最初,该按钮具有白色背景,其文本为 Laser Off。当用户点击按钮时,文本变为Laser on,背景颜色变为绿色。当用户第二次点击按钮时,文本恢复为Laser off,背景颜色也恢复为白色。因此,每次连续激活按钮时,按钮都会不断切换其文本和背景颜色。希望对您有所帮助。

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

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 2011-08-14
    • 2012-01-07
    • 2023-03-12
    • 1970-01-01
    • 2010-12-11
    • 2016-09-22
    • 2011-11-03
    • 2019-08-28
    相关资源
    最近更新 更多