java - 如何使用JButton?

标签 java swing colors jbutton

嗨,我正在尝试制作 Java 桌面应用程序,其中使用 3 个 JButton。我希望当我单击任何 JButton 时,它应该更改该按钮的颜色,如果我单击任何其他 JButton,则以前单击的按钮应该像之前一样,最近单击的按钮更改其颜色,直到单击另一个 JButton

我怎样才能实现这个目标

这是我的按钮代码

b1 = new JButton("Ok");
b1.setBounds(800, 725, 100, 40);
b1.setForeground(Color.BLACK);
c.add(b1);

b2 = new JButton("Print");
b2.setBounds(925, 725, 100, 40);
b2.setForeground(Color.BLACK);
c.add(b2);
b1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae){
        b1.setBackground(Color.BLUE);
        JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court");
    }
});

b2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae){
        b2.setBackground(Color.BLUE);
        JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court");
    }
});

最佳答案

这实际上比听起来更棘手。某些外观在呈现按钮时不使用背景颜色属性(例如 Windows)

一种可能的解决方案可能是使用 ButtonGroupJToggleButton,这将确保一次仅选择一个按钮,并允许您监视所选按钮的状态按钮,例如...

toggle

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ToggleButton {

    public static void main(String[] args) {
        new ToggleButton();
    }

    public ToggleButton() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                final JToggleButton b1 = new JToggleButton("Ok");
                b1.setContentAreaFilled(false);
                b1.setOpaque(true);
                b1.getModel().addChangeListener(new ChangeListener() {
                    @Override
                    public void stateChanged(ChangeEvent e) {
                        if (b1.isSelected()) {
                            b1.setBackground(Color.BLACK);
                        } else {
                            b1.setBackground(null);
                        }
                    }
                });
                final JToggleButton b2 = new JToggleButton("Print");
                b2.setContentAreaFilled(false);
                b2.setOpaque(true);
                b2.getModel().addChangeListener(new ChangeListener() {
                    @Override
                    public void stateChanged(ChangeEvent e) {
                        if (b2.isSelected()) {
                            b2.setBackground(Color.BLUE);
                        } else {
                            b2.setBackground(null);
                        }
                    }
                });

                ButtonGroup bg = new ButtonGroup();
                bg.add(b1);
                bg.add(b2);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(b1);
                frame.add(b2);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

另一种解决方案可能是使用JRadioButton,它通常用于指示从一组选项中进行的单个选择。

参见How to Use Buttons, Check Boxes, and Radio Buttons

关于java - 如何使用JButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22679526/

相关文章:

java - 在 ImageView 上添加多个效果

java - 具有数据库 Access 权限的 jtable 单元格内的复选框

python - 将 rgba 颜色代码 255,255,255,255 转换为 1,1,1,1 中的 kivy 颜色代码

android - 无法将颜色转换为可绘制对象

Java JMenuBar 未添加或正确显示

java - 在 Java 中迭代 Multiset,使用 setcount() 且不带 ConcurrentModificationException

java - 计算列的总和并将其放入 jtable 中

java - 将 JSplitPane 与 AWT 组件一起使用

Emacs 小 map : change color of screen zone

java - 使用 spring 中方法返回的对象注入(inject)构造函数