Java 单击j/切换按钮,然后设置图标/图像
我在做一个有点像扫雷艇的4x4滑板。每个按钮都有一个炸弹或另一个图像 这是我的密码:Java 单击j/切换按钮,然后设置图标/图像,java,swing,click,icons,jtogglebutton,Java,Swing,Click,Icons,Jtogglebutton,我在做一个有点像扫雷艇的4x4滑板。每个按钮都有一个炸弹或另一个图像 这是我的密码: private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { this.jToggleButton1.setIcon(new javax.swing.ImageIcon("bombaa.png")); } privat
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
this.jToggleButton1.setIcon(new javax.swing.ImageIcon("bombaa.png"));
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.jToggleButton1.setIcon(new javax.swing.ImageIcon("bombaa.png"));
}
我也试过这样
private void setIcon1(){
setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("bombaa.png")));
}
并在jButton1ActionPerformed和jbutton1mousedicked中调用setIcon(),但这会将我的图像设置为程序的主图标
基本上我需要的是:点击一个按钮,只设置一次图像/图标。从创建自己的按钮开始,一个可以控制所选状态的按钮
public class StickyModel extends JToggleButton.ToggleButtonModel {
public void reset() {
super.setSelected(false);
}
@Override
public void setSelected(boolean b) {
if (!isSelected()) {
super.setSelected(b);
}
}
}
这将防止按钮在被设置为选中后变为“未选中”(它还包括一个reset
方法,该方法将使按钮为“未选中”)
使用“空白”或空“默认”图标创建按钮,并将selectedIcon
属性设置为选中按钮时所需显示的内容
JToggleButton btn = new JToggleButton();
btn.setModel(new StickyModel());
btn.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Blank.png"))));
btn.setSelectedIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Bomb.png"))));
因此,单击按钮时,它将使用selectedIcon
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
try {
add(createButton());
add(createButton());
add(createButton());
} catch (IOException exp) {
exp.printStackTrace();
}
}
protected JToggleButton createButton() throws IOException {
JToggleButton btn = new JToggleButton();
btn.setModel(new StickyModel());
btn.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Blank.png"))));
btn.setSelectedIcon(new ImageIcon(ImageIO.read(getClass().getResource("/Bomb.png"))));
return btn;
}
}
public class StickyModel extends JToggleButton.ToggleButtonModel {
public void reset() {
super.setSelected(false);
}
@Override
public void setSelected(boolean b) {
if (!isSelected()) {
super.setSelected(b);
}
}
}
}
首先,不要将
MouseListener
s与JButton
s一起使用。您可以创建一个不允许关闭的自定义按钮模型,因此,一旦选中,它的状态将保持选中状态(直到您重置它),这样您就可以使用选中/未选中的图标属性。我尝试了Statechanged和ActionPerformed,但当我将鼠标悬停在按钮上时,图像会显示出来(因为这些事件包括了所有可能的动作,比如鼠标悬停、鼠标释放等)。无论如何,如果你有任何链接,我会考虑创建自定义按钮,如果你有任何链接,我将不胜感激:)非常感谢!现在,我需要让对手在棋盘上放置炸弹,每次旋转1圈,当对方获胜时进行验证。这是我两周后的最后一个项目,所以我可能会带着更多的问题回来:再次感谢。