更改 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);
}
}
我的表单上有 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);
}
}