Java 按钮释放动作

Java 按钮释放动作,java,swing,jbutton,Java,Swing,Jbutton,我正试图在JButton发行版上创建一个操作,但我不确定如何实现这一点。按下按钮时,我可以做一个动作。按下按钮时,图像将变为红点,松开按钮时,图像将变回默认的绿点 我的按钮按下代码如下,如果有人能告诉我如何在按钮被释放时创建一个最有用的操作。谢谢 @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == change1) { p1a.setIcon(CLR); // THIS

我正试图在
JButton
发行版上创建一个操作,但我不确定如何实现这一点。按下按钮时,我可以做一个动作。按下按钮时,图像将变为红点,松开按钮时,图像将变回默认的绿点

我的按钮按下代码如下,如果有人能告诉我如何在按钮被释放时创建一个最有用的操作。谢谢

@Override
public void actionPerformed(ActionEvent e) {

    if (e.getSource() == change1) {

        p1a.setIcon(CLR); // THIS IS THE IMAGE WHEN BUTTON PRESSED
        // WOULD LIKE TO CHANGE BACK TO DEFAULT IMAGE HERE WHEN BUTTON IS RELEASED
    }
}
按下按钮时,图像将变为红点,松开按钮时,图像将变回默认的绿点

这完全可以在
JButton
中实现。看到像

例如


我不是在寻找一个按钮上的图标来改变我是在寻找一个JPanel中的图像来改变…虽然概念相同

很高兴能提前得到这些信息

一种方法可能是将侦听器附加到
按钮模型
,并监视其状态更改


“按下按钮时,图像将变为红点,松开按钮时,图像将变回默认绿点。”这完全可以在
JButton
中实现。看到类似..
JButton
这样的东西了吗,为什么不利用可用的API?我不是在按钮上寻找要更改的图标,我是在JPanel中寻找要更改的图像…相同的概念,尽管
我不是在按钮上寻找要更改的图标,我是在JPanel中寻找要更改的图像,这是本应更改的重要信息包括在原始问题中。注意你问题的措辞,因为我们猜不出你真正的意思。前两个回答你问题的人以为你在谈论按钮的图标。谢谢你的输入,我将把它应用到我的项目中。我投了一张赞成票,但我需要15的声望来展示它。这正是我想要的!这两个答案都适用于我的项目。谢谢(1+)如果您使用键盘激活按钮,此解决方案也会起作用。@PilotinControl,
这正是我要找的
-不要忘记通过单击复选标记“接受”答案,以便人们知道问题已经解决。
import javax.swing.*;
import java.net.*;

public class ButtonIcons {

    ButtonIcons() throws MalformedURLException {
        ImageIcon redIcon = new ImageIcon(new URL(
                "https://i.stack.imgur.com/wCF8S.png"));
        ImageIcon grnIcon = new ImageIcon(new URL(
                "https://i.stack.imgur.com/T5uTa.png"));
        JButton button = new JButton("Click me!", grnIcon);
        button.setPressedIcon(redIcon);
        JOptionPane.showMessageDialog(null, button);
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            try {
                ButtonIcons o = new ButtonIcons();
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private Icon normalIcon;
        private Icon pressedIcon;

        public TestPane() {
            setBorder(new EmptyBorder(16, 16, 16, 16));
            normalIcon = makeIcon(Color.GREEN);
            pressedIcon = makeIcon(Color.RED);

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;

            JLabel label = new JLabel(normalIcon);
            JButton btn = new JButton("Pressy");

            add(btn, gbc);
            add(label, gbc);

            btn.getModel().addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    ButtonModel model = btn.getModel();
                    if (model.isArmed()) {
                        label.setIcon(pressedIcon);
                    } else {
                        label.setIcon(normalIcon);
                    }
                }
            });
        }

        protected Icon makeIcon(Color color) {
            BufferedImage img = new BufferedImage(25, 25, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = img.createGraphics();
            g2d.setColor(color);
            g2d.fillOval(0, 0, 25, 25);
            g2d.dispose();

            return new ImageIcon(img);
        }

    }

}