【问题标题】:How can i change the color of a green ToggleButton to red by a left-click of the mouse如何通过鼠标左键单击将绿色切换按钮的颜色更改为红色
【发布时间】:2016-08-27 17:19:45
【问题描述】:

我想在 Java 中构建一个二维切换按钮数组,当我单击一个按钮时,它会从绿色变为红色,我该怎么做?以下代码创建按钮数组。

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Container implements ActionListener {  

    private static JFrame container;
    private static JToggleButton[][] butoes;    

    public static void main(String args[]) {

        container = new JFrame("Game of Life");
        butoes = new JToggleButton[20][20];
        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 20; j++) {
                butoes[i][j] = new JToggleButton();
            }
        }

        container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        container.setLayout(new GridLayout(20, 20));
        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 20; j++) {
                container.add(butoes[i][j]);
            }
        }
        container.pack();
        container.setSize(700, 700);
        container.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent evento) {
    }
}

【问题讨论】:

    标签: java swing user-interface click togglebutton


    【解决方案1】:
    UIManager.put("ToggleButton.select", yourColorHere);
    

    来自

    https://community.oracle.com/thread/1485709?start=0&tstart=0

    【讨论】:

    • 我知道操作只是在问一个简单的问题,但这有点像试图用小月亮钉住钉子,并且在大背景下遇到问题。因此,如果我们从操作提供的上下文中查看,那么它可能会起作用,但如果他们有其他使用切换按钮的视图,这将不起作用,通常,只有在您希望每件事都改变时才点击 UIManager
    • 这很好,并没有改变它不起作用的事实:P
    • 这个答案对我设置 selected 颜色有用(当然,用颜色替换 yourColorHere 时;UIManager.put("ToggleButton.select", Color.RED);)。
    【解决方案2】:

    ControlAltDel 的答案是正确的,在这种情况下应该可以用作此特定问题的解决方案。但是,一般来说,这里有几件事。首先,当谈到对 Swing 中的 GUI 更改做出反应时,您需要熟悉它使用的侦听器范例。这种范例允许您对(几乎)任何您想要的 GUI 事件做出反应,并适当地修改您的程序。

    但是,在这种情况下,这是无关紧要的知识(我将其留在答案中,因为在处理 Swing UI 时了解它仍然非常重要)。问题是所选颜色仅通过按钮的 UI 公开,因此,为了更新它,您需要更改与此特定按钮关联的默认 UI(有替代方法,但这是其中一种更简单的)。

    这似乎比 ControlAltDel 建议的仅更新UIManager 更麻烦。但同样重要的是要注意,UIManager 中核心属性的更改是全局(正如 MadProgrammer 所避免的那样)。如果您更新UIManager 中选定的切换按钮颜色,您将针对JToggleButton每个 实例更新它,虽然在这种特定情况下可能不是一件坏事,但绝对是在实践中要记住的事情。

    考虑到所有这些,一个可能的解决方法是替换它:

    butoes[i][j] = new JToggleButton();
    

    这样的:

    JToggleButton b = new JToggleButton();
    b.setBackground(Color.GREEN);
    b.setUI(new MetalToggleButtonUI() {
        @Override
        protected Color getSelectColor() {
            return Color.RED;
        }
    });
    butoes[i][j] = b;
    

    建议查看 Oracle 网站上的 this 课程、javadocJToggleButtonthis 其他 SO 问题。

    【讨论】:

    • 没有用,我试着把所有的切换按钮都变成绿色,也没有用。
    • 道歉;当我发布它时,我不在开发环境中。有两个问题。首先,它应该是setBackground() 而不是setForeground()。其次,所选按钮的颜色实际上与背景颜色无关(这是我的遗忘)。有很多解决方法(同样,使用 ControlAltDel 的解决方案应该可以工作),但我很快会更新我的答案,以包含替代 UI 的替代方法。
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 2016-02-05
    • 2021-12-31
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多