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);
}
}
}