Java 当按钮不应该改变时,它们都会改变相同的颜色
我一共有9个按钮。它们中的每一个都需要有一个单独的颜色,一旦被选中,它们将更改为该颜色。现在,无论选择哪个按钮,它们都会遵循最终颜色的属性(在本例中为白色),但是我需要每个按钮都有一个单独的颜色Java 当按钮不应该改变时,它们都会改变相同的颜色,java,Java,我一共有9个按钮。它们中的每一个都需要有一个单独的颜色,一旦被选中,它们将更改为该颜色。现在,无论选择哪个按钮,它们都会遵循最终颜色的属性(在本例中为白色),但是我需要每个按钮都有一个单独的颜色 import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JToggleButton; import javax.swing.WindowConstants; import javax.sw
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JToggleButton;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class NewJFrame extends javax.swing.JFrame {
private JToggleButton jToggleButton1;
private JToggleButton jToggleButton2;
private JToggleButton jToggleButton3;
private JToggleButton jToggleButton4;
private JToggleButton jToggleButton5;
private JToggleButton jToggleButton6;
private JToggleButton Magenta;
private JToggleButton jToggleButton8;
private JToggleButton jToggleButton9;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public NewJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
FlowLayout thisLayout = new FlowLayout();
getContentPane().setLayout(thisLayout);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
jToggleButton1 = new JToggleButton();
getContentPane().add(jToggleButton1);
jToggleButton1.setText("Red");
jToggleButton1.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton1.setBackground(null);
UIManager.put("ToggleButton.select", Color.RED);
SwingUtilities.updateComponentTreeUI(jToggleButton1);
}
{
jToggleButton2 = new JToggleButton();
getContentPane().add(jToggleButton2);
jToggleButton2.setText("Green");
jToggleButton2.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton2.setBackground(null);
UIManager.put("ToggleButton.select", Color.GREEN);
SwingUtilities.updateComponentTreeUI(jToggleButton2);
}
{
jToggleButton3 = new JToggleButton();
getContentPane().add(jToggleButton3);
jToggleButton3.setText("Blue");
jToggleButton3.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton3.setBackground(null);
UIManager.put("ToggleButton.select", Color.BLUE);
SwingUtilities.updateComponentTreeUI(jToggleButton3);
}
{
jToggleButton4 = new JToggleButton();
getContentPane().add(jToggleButton4);
jToggleButton4.setText("Orange");
jToggleButton4.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton4.setBackground(null);
UIManager.put("ToggleButton.select", Color.ORANGE);
SwingUtilities.updateComponentTreeUI(jToggleButton4);
}
{
jToggleButton5 = new JToggleButton();
getContentPane().add(jToggleButton5);
jToggleButton5.setText("Black");
jToggleButton5.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton5.setBackground(null);
UIManager.put("ToggleButton.select", Color.BLACK);
SwingUtilities.updateComponentTreeUI(jToggleButton5);
}
{
jToggleButton6 = new JToggleButton();
getContentPane().add(jToggleButton6);
jToggleButton6.setText("Yellow");
jToggleButton6.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton6.setBackground(null);
UIManager.put("ToggleButton.select", Color.YELLOW);
SwingUtilities.updateComponentTreeUI(jToggleButton6);
}
{
Magenta = new JToggleButton();
getContentPane().add(Magenta);
Magenta.setText("Magenta");
Magenta.setPreferredSize(new java.awt.Dimension(100, 100));
Magenta.setBackground(null);
UIManager.put("ToggleButton.select", Color.MAGENTA);
SwingUtilities.updateComponentTreeUI(Magenta);
}
{
jToggleButton8 = new JToggleButton();
getContentPane().add(jToggleButton8);
jToggleButton8.setText("Pink");
jToggleButton8.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton8.setBackground(null);
UIManager.put("ToggleButton.select", Color.PINK);
SwingUtilities.updateComponentTreeUI(jToggleButton8);
}
{
jToggleButton9 = new JToggleButton();
getContentPane().add(jToggleButton9);
jToggleButton9.setText("White");
jToggleButton9.setPreferredSize(new java.awt.Dimension(100, 100));
jToggleButton9.setBackground(null);
UIManager.put("ToggleButton.select", Color.WHITE);
SwingUtilities.updateComponentTreeUI(jToggleButton9);
}
pack();
this.setSize(350, 370);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这将设置应用程序中所有选定按钮的默认颜色
要设置单个按钮的颜色,必须使用setBackground。由于要在选择按钮时更改颜色,因此必须对事件作出反应并检查按钮的状态:
jToggleButton1.setUI(new BasicToggleButtonUI());
jToggleButton1.addItemListener(ev -> {
if (ev.getStateChange() == ItemEvent.SELECTED)
jToggleButton1.setBackground(Color.RED);
else
jToggleButton1.setBackground(null);
});
当您向许多按钮添加相同的逻辑时,创建一个方法并在事件侦听器中调用它可能是有意义的:
private void updateColorIfSelected(JToggleButton btn, ItemEvent ev, Color color) {
if (ev.getStateChange() == ItemEvent.SELECTED)
btn.setBackground(color);
else
btn.setBackground(null);
}
然后:
jToggleButton1.setUI(new BasicToggleButtonUI());
jToggleButton1.addItemListener(ev -> updateColorIfSelected(jToggleButton1, ev, Color.RED));
这将设置应用程序中所有选定按钮的默认颜色
要设置单个按钮的颜色,必须使用setBackground。由于要在选择按钮时更改颜色,因此必须对事件作出反应并检查按钮的状态:
jToggleButton1.setUI(new BasicToggleButtonUI());
jToggleButton1.addItemListener(ev -> {
if (ev.getStateChange() == ItemEvent.SELECTED)
jToggleButton1.setBackground(Color.RED);
else
jToggleButton1.setBackground(null);
});
当您向许多按钮添加相同的逻辑时,创建一个方法并在事件侦听器中调用它可能是有意义的:
private void updateColorIfSelected(JToggleButton btn, ItemEvent ev, Color color) {
if (ev.getStateChange() == ItemEvent.SELECTED)
btn.setBackground(color);
else
btn.setBackground(null);
}
然后:
jToggleButton1.setUI(new BasicToggleButtonUI());
jToggleButton1.addItemListener(ev -> updateColorIfSelected(jToggleButton1, ev, Color.RED));
不必仔细观察,在您调用UIManager.putToggleButton.select的每一步中。。。;带点颜色。关键是,为其添加颜色的关键点始终保持不变。因此,存储在该键下的值将在每次调用时被覆盖。因此,您的物品都将使用最新注册的颜色。我对Java还是相当陌生,我有一个基本的了解,所以请耐心等待我,但是,有没有办法解决这个问题?还是我必须找到一种新的实现颜色变换的方法?我不是这方面的专家。问题是,您的按钮似乎都是从UIManager中的按键ToggleButton.select下的值获得颜色的。如前所述,存储在那里的值是白色的,因为您总是覆盖该值。您需要一些方法,以便所有按钮从不同的来源获取颜色,而不是完全从同一个键获取颜色。。。;带点颜色。关键是,为其添加颜色的关键点始终保持不变。因此,存储在该键下的值将在每次调用时被覆盖。因此,您的物品都将使用最新注册的颜色。我对Java还是相当陌生,我有一个基本的了解,所以请耐心等待我,但是,有没有办法解决这个问题?还是我必须找到一种新的实现颜色变换的方法?我不是这方面的专家。问题是,您的按钮似乎都是从UIManager中的按键ToggleButton.select下的值获得颜色的。如前所述,存储在那里的值是白色的,因为您总是覆盖该值。您需要一些方法,以便所有按钮的颜色都来自不同的来源,而不是完全来自同一个键?这就是我目前的设置方式,但事实并非如此working@Al-抱歉,您必须将按钮的UI设置为BasicToggleButtonUI,否则它们将忽略背景色。我已经更新了我的答案。否则,您的代码看起来很好!非常感谢。我应该把每段代码放在哪里?这就是我目前的设置方式,但事实并非如此working@Al-抱歉,您必须将按钮的UI设置为BasicToggleButtonUI,否则它们将忽略背景色。我已经更新了我的答案。否则,您的代码看起来很好!多谢各位