- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个有 12 个切换按钮的内存游戏。如果您单击一个按钮,图标就会改变。如果两个图标匹配,则两个图标都会翻转。但是,如果它们不匹配,则计时器启动 1.5 秒,然后将两个切换按钮切换回主图标“MemoryGame.png”。这就是我所拥有的:
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.*;
import java.util.Collections;
public class MemoryGame extends JToggleButton implements ActionListener {
private Timer cdTimer;
private Timer swTimer;
private int count = 1;
private JToggleButton[] buttons;
private String[] commandID = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"};
ArrayList<ImageIcon> iconList = new ArrayList();
ImageIcon icon = new ImageIcon("MemoryGame.png");
public MemoryGame() {
JFrame jfrm = new JFrame();
jfrm.setSize(1000, 1000);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(3,4);
JPanel gamePanel = new JPanel();
gamePanel.setLayout(layout);
JPanel timerPanel;
createIcons();
buttons = new JToggleButton[12];
for(int i = 0; i < buttons.length; i++) {
JToggleButton btn = new JToggleButton(icon);
buttons[i] = btn;
buttons[i].setActionCommand(commandID[i]);
buttons[i].addActionListener(this);
gamePanel.add(buttons[i]);
}
//Collections.shuffle(Arrays.asList(buttons));
jfrm.add(gamePanel, BorderLayout.CENTER);
jfrm.setLocationRelativeTo(null);
jfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e){
JToggleButton btn = (JToggleButton)e.getSource();
JToggleButton btn2 = (JToggleButton)e.getSource();
firstClick(btn, btn2);
secondClick(btn, btn2);
matching(btn, btn2);
}
private void firstClick(JToggleButton btn, JToggleButton btn2) {
if(btn == buttons[0] || btn == buttons[1])
btn.setIcon(iconList.get(0));
else if(btn == buttons[2] || btn == buttons[3])
btn.setIcon(iconList.get(1));
else if(btn == buttons[4] || btn == buttons[5])
btn.setIcon(iconList.get(2));
else if(btn == buttons[6] || btn == buttons[7])
btn.setIcon(iconList.get(3));
else if(btn == buttons[8] || btn == buttons[9])
btn.setIcon(iconList.get(4));
else if(btn == buttons[10] || btn == buttons[11])
btn.setIcon(iconList.get(5));
}
private void secondClick(JToggleButton btn, JToggleButton btn2){
if(btn2 != btn && btn2 == buttons[0] || btn2 == buttons[1])
btn.setIcon(iconList.get(0));
else if(btn2 != btn && btn2 == buttons[2] || btn2 == buttons[3])
btn.setIcon(iconList.get(1));
else if(btn2 != btn && btn2 == buttons[4] || btn2 == buttons[5])
btn.setIcon(iconList.get(2));
else if(btn2 != btn && btn2 == buttons[6] || btn2 == buttons[7])
btn.setIcon(iconList.get(3));
else if(btn2 != btn && btn2 == buttons[8] || btn2 == buttons[9])
btn.setIcon(iconList.get(4));
else if(btn2 != btn && btn2 == buttons[10] || btn2 == buttons[11])
btn.setIcon(iconList.get(5));
}
private void matching(JToggleButton btn, JToggleButton btn2){
if(btn.isSelected()){
btn.setEnabled(false);
if(btn2.isSelected()){
btn2.setEnabled(false);
if(!btn.getIcon().toString().equals(btn2.getIcon().toString())){
startTime(1, btn, btn2);
}
else
retirePair(btn, btn2);
}
}
}
private void startTime(int countPassed, JToggleButton button, JToggleButton button2){
ActionListener action = new ActionListener(){
public void actionPerformed(ActionEvent e){
if(count == 0){
cdTimer.stop();
button.setIcon(icon);
button2.setIcon(icon);
button.setEnabled(true);
button2.setEnabled(true);
button.setSelected(false);
button2.setSelected(false);
}
else
count--;
}
};
cdTimer = new Timer(500, action);
cdTimer.start();
count = countPassed;
}
private void unflipPair(JToggleButton btn, JToggleButton btn2){
btn.setEnabled(true);
btn2.setEnabled(true);
btn.setSelected(false);
btn2.setSelected(false);
}
private void retirePair(JToggleButton btn, JToggleButton btn2){
btn.setEnabled(false);
btn2.setEnabled(false);
btn.setSelected(true);
btn2.setSelected(true);
}
private void createIcons(){
ImageIcon icon1 = new ImageIcon("1.png");
ImageIcon icon2 = new ImageIcon("2.png");
ImageIcon icon3 = new ImageIcon("3.png");
ImageIcon icon4 = new ImageIcon("4.png");
ImageIcon icon5 = new ImageIcon("5.png");
ImageIcon icon6 = new ImageIcon("6.png");
iconList.add(icon1);
iconList.add(icon2);
iconList.add(icon3);
iconList.add(icon4);
iconList.add(icon5);
iconList.add(icon6);
}
我遇到的问题是计时器根本不启动;因此,图标保持不变,即使不匹配也不会翻转回来。有办法让这项工作发挥作用吗?谢谢
最佳答案
这个...
public void actionPerformed(ActionEvent e){
JToggleButton btn = (JToggleButton)e.getSource();
JToggleButton btn2 = (JToggleButton)e.getSource();
firstClick(btn, btn2);
secondClick(btn, btn2);
matching(btn, btn2);
}
在代码其余部分的上下文中没有意义,因为 btn
和 btn2
是同一件事。
相反,当调用 actionPerformed
时,您需要确定是否有任何按钮之前已被操作过,如果有,那么这可能是第二个按钮,您需要比较它们,如果没有,这可能是第一个按钮,您需要等待第二个按钮。
也许像...
private JToggleButton lastButton;
public void actionPerformed(ActionEvent e){
if (lastButton == null) {
lastButton = (JToggleButton)e.getSource();
return;
}
JToggleButton btn = (JToggleButton)e.getSource();
firstClick(btn, lastButton);
secondClick(btn, lastButton);
matching(btn, lastButton);
lastButton = null;
}
将是一个更好的起点(nb我没有运行其余的代码,但这是一个非常明显的问题,需要先修复它才能进行进一步的测试)
更新 - 经过一些测试,这至少会让计时器启动
Hello, so I tried it. However, the buttons still did not flip
基本的修复应该会让你行动起来,但我必须进行一些其他更改才能使其按照你期望的方式工作
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.Timer;
public class MemoryGame extends JToggleButton implements ActionListener {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MemoryGame();
}
});
}
private Timer cdTimer;
private JToggleButton[] buttons;
ArrayList<String> iconList = new ArrayList();
public MemoryGame() {
JFrame jfrm = new JFrame();
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(3, 4);
JPanel gamePanel = new JPanel();
gamePanel.setLayout(layout);
createIcons();
buttons = new JToggleButton[12];
for (int i = 0; i < buttons.length; i++) {
JToggleButton btn = new JToggleButton("~");
btn.setFocusable(false);
buttons[i] = btn;
// buttons[i].setActionCommand(commandID[i]);
buttons[i].addActionListener(this);
gamePanel.add(buttons[i]);
}
//Collections.shuffle(Arrays.asList(buttons));
jfrm.add(gamePanel, BorderLayout.CENTER);
jfrm.pack();
jfrm.setLocationRelativeTo(null);
jfrm.setVisible(true);
}
private JToggleButton last;
public void actionPerformed(ActionEvent e) {
JToggleButton btn = (JToggleButton) e.getSource();
firstClick(btn);
if (last == null) {
last = btn;
return;
}
matching(btn, last);
last = null;
}
private void firstClick(JToggleButton btn) {
if (btn == buttons[0] || btn == buttons[1]) {
btn.setText(iconList.get(0));
} else if (btn == buttons[2] || btn == buttons[3]) {
btn.setText(iconList.get(1));
} else if (btn == buttons[4] || btn == buttons[5]) {
btn.setText(iconList.get(2));
} else if (btn == buttons[6] || btn == buttons[7]) {
btn.setText(iconList.get(3));
} else if (btn == buttons[8] || btn == buttons[9]) {
btn.setText(iconList.get(4));
} else if (btn == buttons[10] || btn == buttons[11]) {
btn.setText(iconList.get(5));
}
}
private void matching(JToggleButton btn, JToggleButton btn2) {
if (btn.isSelected()) {
btn.setEnabled(false);
if (btn2.isSelected()) {
btn2.setEnabled(false);
if (!btn.getText().equals(btn2.getText())) {
startTime(btn, btn2);
} else {
retirePair(btn, btn2);
}
}
}
}
private void startTime(JToggleButton button, JToggleButton button2) {
System.out.println("!!");
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("..");
cdTimer.stop();
button.setText("~");
button2.setText("~");
button.setEnabled(true);
button2.setEnabled(true);
button.setSelected(false);
button2.setSelected(false);
}
};
cdTimer = new Timer(1000, action);
cdTimer.start();
}
private void unflipPair(JToggleButton btn, JToggleButton btn2) {
btn.setEnabled(true);
btn2.setEnabled(true);
btn.setSelected(false);
btn2.setSelected(false);
}
private void retirePair(JToggleButton btn, JToggleButton btn2) {
btn.setEnabled(false);
btn2.setEnabled(false);
btn.setSelected(true);
btn2.setSelected(true);
}
private void createIcons() {
ImageIcon icon1 = new ImageIcon("1.png");
ImageIcon icon2 = new ImageIcon("2.png");
ImageIcon icon3 = new ImageIcon("3.png");
ImageIcon icon4 = new ImageIcon("4.png");
ImageIcon icon5 = new ImageIcon("5.png");
ImageIcon icon6 = new ImageIcon("6.png");
iconList.add("1");
iconList.add("2");
iconList.add("3");
iconList.add("4");
iconList.add("5");
iconList.add("6");
}
}
关于java - 使用 JToggleButton 实现内存游戏时计时器不启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768800/
我实现了以下 JDialog: [ jToggleButton1 ] [ jToggleButton2 ] [ jToggleButton2 ] 我希望当用户按下(-toggles-)
我可以设置按钮的颜色,但是一旦按下按钮,它的颜色就是蓝色 - 标准。我想变黑。我该如何更改它? 以下是当前代码: public JPanel gameBoard(){ JPan
好的,所以我做了一个 JToggleButton: JToggleButton button = new JToggleButton(new ImageIcon(features[i].getImag
正如我之前在一篇文章中提到的,我正在将我的程序移植到 Java,以使其可供 Mac OS 和 Linux 用户使用。 在程序开始时,我想使用以下代码检查 adb 是否安装到系统中: private v
我有一个 JToggleButton,不在一个组中,如果按下它,我希望能够取消选择如果我按下另一个 JButton,它就会出现。 我尝试过使用: toggleButton.setSelected(fa
好吧,标题说明了一切。 在 Netbeans 中,我可以更改 JToggleButton 的字体,但只有粗体和斜体选项,但没有下划线文本。我想这不是严格意义上的字体属性,但我不知道该怎么做。 最佳答案
我正在尝试使用通常没有边框的 JToggleButton 按钮,并且只显示我提供的图标。但是当它们被点击时,我希望显示选定的按钮。 我知道通过使用 setLayout(null)。初始状态有效,但当我
当在 Windows 7 JToolBar 中使用时,JToggleButton 有时会截断其标签文本。 请参阅下面代码中的示例。以大写字母 'W' 开头的切换按钮将被截断;以空格(甚至小写 'w')
我正在尝试创建一个有 12 个切换按钮的内存游戏。如果您单击一个按钮,图标就会改变。如果两个图标匹配,则两个图标都会翻转。但是,如果它们不匹配,则计时器启动 1.5 秒,然后将两个切换按钮切换回主图标
我需要请帮忙。我有一个 Java 代码,其中有一个小 GUI。我不能点击按钮两次。我只能激活 while 循环,但无法停用它。 这是我的代码: import java.awt.Dimension; i
所以我有三个按钮,比如说 1、2 和 3。我希望,当我单击按钮1、按钮2和按钮3时取消选择。之后,当我单击按钮2时,我希望取消选择按钮1和按钮3。按钮3 也是如此。 基本上,当我单击一个按钮时,我希望
我想创建 100 个 JToggleButtons 并使用 for 循环来完成并将它们保存在链接列表中。然后以网格袋布局显示它们。 ArrayList buttons = new ArrayList(
我对此有点挣扎。在对 Google 进行研究后,我创建了以下计时器例程,该例程在调用时效果良好 // play move method public static void playMove() {
如何实现三态切换按钮?我正在使用 eclipse 和 windowBuilder,并且正在编写一个必须具有 3 态按钮的程序。我使用了 JToggleButtons 和它们的两个状态,但不能实现第三个
我有几个切换按钮可以为文本添加样式: JToggleButton boldButton = new JToggleButton("Bold"); boldButton.addActio
我正在尝试用 Java 编写简单的 vector 图形编辑器,但被 GUI 卡住了……我有 2 个 JPanel:第一个用于“ Canvas 区域”,第二个用于按钮。 Canvas 区域是一个 Sin
我有一个使用 Swing 作为 UI 的应用程序。我想要一个按钮来切换应用程序正在使用的通信类型。我想使用切换按钮来标识所选的通信类型。 我的问题是我不希望按钮的颜色在单击后发生变化。目前该按钮看起来
我创建了一个 JToggleButton,当它被选中时会显示图像。除了图像不以按钮为中心外,一切都完美无缺。图像的左上角位于按钮的中心点,然后图像向下并向按钮的右下角伸出。 JToggleButton
我正在尝试在 JToolBar 中对齐 JToggleButton。我希望按钮垂直向左对齐。我的代码如下: JToolBar toolbar = new JToolBar(); toolbar.set
我有一个 JTogglebuttons 数组和一个 JButton,当按下 JButton 时,它会启动一个循环,迭代所有 JTogglebuttons 以查看它是否被按下,如果是,则应使其禁用/不可
我是一名优秀的程序员,十分优秀!