Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当按钮不应该改变时,它们都会改变相同的颜色_Java - Fatal编程技术网

Java 当按钮不应该改变时,它们都会改变相同的颜色

Java 当按钮不应该改变时,它们都会改变相同的颜色,java,Java,我一共有9个按钮。它们中的每一个都需要有一个单独的颜色,一旦被选中,它们将更改为该颜色。现在,无论选择哪个按钮,它们都会遵循最终颜色的属性(在本例中为白色),但是我需要每个按钮都有一个单独的颜色 import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JToggleButton; import javax.swing.WindowConstants; import javax.sw

我一共有9个按钮。它们中的每一个都需要有一个单独的颜色,一旦被选中,它们将更改为该颜色。现在,无论选择哪个按钮,它们都会遵循最终颜色的属性(在本例中为白色),但是我需要每个按钮都有一个单独的颜色

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,否则它们将忽略背景色。我已经更新了我的答案。否则,您的代码看起来很好!多谢各位