更改 netbeans 中所有按钮的颜色

Changing colour of all buttons in netbeans

我的表单上有 4 个按钮和一个带有更改颜色选项的菜单栏。在我的代码中,我单独更改每个颜色,如下所示:

jButton1.setBackground(Color.cyan);
jButton2.setBackground(Color.cyan);
jButton3.setBackground(Color.cyan);
jButton4.setBackground(Color.cyan);

这现在不是问题,但如果我添加更多它们可能会成为问题。那么有没有办法一次性改变所有当前按钮的颜色?

您可以尝试创建一个 jbutton 数组,例如:
JButton[] buttonsArr = new JButton[4];
然后你可以循环项目并为所有项目设置文本颜色。 如:

for(int i = 0;i < 4;i++){
buttonsArr[i] = new JButton(String.valueOf(i));
// Or you can add the color such as
buttonsArr[i].setBackground(Color.cyan); 
}

另一种解决方案是声明一个颜色变量并将其用作全局变量或枚举,例如:

Color globalColor = new Color(187, 157, 177);

jButton1.setBackground(globalColor);
jButton2.setBackground(globalColor);
jButton3.setBackground(globalColor);
jButton4.setBackground(globalColor);

无论何时您需要更改它,您都可以通过更改它的值轻松更改它。

查看这些链接以获得更多帮助:
Link_1 & Link_2

假设你有这个界面

并且您想将所有按钮的颜色更改为您想要的任何其他颜色。

我的建议是创建一个类似于 DFS 算法的递归方法,它可以扫描界面中的所有组件并找到所有按钮,即使每个按钮都是另一个组件的子按钮。

这是一个例子:-

private List<Component> getAllButtons(Component[] components) {
    List<Component> buttons = new LinkedList();

    for (Component component: components) {
        if (component instanceof JButton) {
            buttons.add(component);
        } else {
            JComponent jComponent = ((JComponent) component);
            buttons.addAll(getAllButtons(jComponent.getComponents()));
        }
    }

    return buttons;
}

此方法需要传递界面的父组件,它会扫描每个组件是否是按钮,如果是按钮!如果没有,它将被添加到列表中!它将获取此组件的子组件并递归扫描每个组件,直到获取所有按钮。

现在,要调用此方法,您应该向 Button Color 项添加侦听器。对我来说,我更喜欢为所有这些项目创建一个动作侦听器。

private void actionPerformed(java.awt.event.ActionEvent evt) {
    String colorName = ((JMenuItem) evt.getSource()).getText();

    Color color = null;
    if (colorName.equals("red")) {
        color = Color.RED;
    } else if (colorName.equals("green")) {
        color = Color.GREEN;
    } else if (colorName.equals("blue")) {
        color = Color.BLUE;
    } else if (colorName.equals("cyan")) {
        color = Color.CYAN;
    }

    List<Component> buttons = getAllButtons(this.getComponents());
    for (Component component : buttons) {
        component.setBackground(color);
    }
}