Я делаю совет 4x4 вроде как тральщик. У каждой кнопки есть бомба или другое изображение.
Вот мой код:
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")));
}
и вызовите setIcon() в jButton1ActionPerformed и jButton1MouseClicked, но это устанавливает мое изображение в качестве основного значка для программы.
В основном, что мне нужно: нажмите кнопку и установите изображение/значок только один раз.
Начните с создания собственной кнопки, для которой вы можете управлять выбранным состоянием...
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. Вы можете создать пользовательскую модель кнопки, которая не позволяет отключить ее, поэтому после выбора ее состояние остается выбранным (до тех пор, пока вы не сбросите ее), чтобы вы могли использовать выбранные / невыбранные свойства значка.