gpt4 book ai didi

Java Hangman - 单击时如何为 JButton 分配字母?

转载 作者:行者123 更新时间:2023-12-01 18:57:56 26 4
gpt4 key购买 nike

我在 Netbeans 上制作了一个基本的刽子手游戏,其工作方式是用户单击 26 个按钮之一(字母表中的每个字母一个),然后在单词中测试该字母。我遇到的主要问题是测试这封信。

    //array holding all buttons        
JButton[] alphabet = {AButton, BButton, CButton, DButton, EButton, FButton, GButton, HButton, IButton, JButton, KButton, LButton, MButton, NButton, OButton, PButton, QButton, RButton, SButton, TButton, UButton, VButton, WButton, XButton, YButton, ZButton};

//getting the current letter(need something in place of the 0)
String currentLetter = (alphabet[0].getLabel());

//replace underscores with letters as they are guessed
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[randValue].replaceAll("[^" + secretWord + "]", "_ ");
}

我在某处读到,使用按钮数组是我必须做的,所以我把它放进去,但它不起作用。另外,我读到程序需要一个 ActionListener 来读取它是什么字母。我以前使用过的尝试是:

currentLetter = AButton.getText();

currentLetter = AButton.getLabel();

但遗憾的是没有效果。因此请记住,我正在使用 Netbeans,而且我对 Java 还很陌生,所以没有复杂的复杂内容,保持简单。谢谢:)

编辑:

        private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {                                        
DoButton.doClick();
}

private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {
JButton button = (JButton) evt.getSource();
String currentLetter = button.getText();

//replace underscores with letters as they are guessed
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
}
}

完整代码:

    import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;

public class MainFrame extends javax.swing.JFrame {

public MainFrame() {
initComponents();
}

static String secretWord = "";
StringBuilder mainWord = new StringBuilder();
String[] words = {"technology", "computer", "camera", "graphic", "digital", "media", "technician",
"photography", "troubleshoot", "pixels", "application", "download"};
Random r = new Random();
int randValue = r.nextInt(11)+1;
String guessWord = words[0];//words[randValue];
int errors = 0;
public static int wins = 0, losses = 0;
String foundWord = null;
String currentLetter;
private void RestartButtonActionPerformed(java.awt.event.ActionEvent evt) {
//restart game
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
DirectionsFrame.WinsLabel.setText(null);
DirectionsFrame.LossesLabel.setText(null);
}

private void GetButtonActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < guessWord.length(); i++) {
mainWord.append("_ ");
}
String SetMain = mainWord.toString();
mainWord.append(secretWord);
WordLabel.setText(SetMain);
GetButton.setEnabled(false);
AButton.setEnabled(true);BButton.setEnabled(true);CButton.setEnabled (true);DButton.setEnabled(true);EButton.setEnabled(true);
FButton.setEnabled(true);GButton.setEnabled(true);HButton.setEnabled (true);IButton.setEnabled(true);JButton.setEnabled(true);
KButton.setEnabled(true);LButton.setEnabled(true);MButton.setEnabled(true);NButton.setEnabled(true);OButton.setEnabled(true);
PButton.setEnabled(true);QButton.setEnabled(true);RButton.setEnabled(true);SButton.setEnabled(true);TButton.setEnabled(true);
UButton.setEnabled(true);VButton.setEnabled(true);WButton.setEnabled(true);XButton.setEnabled(true);YButton.setEnabled(true);
ZButton.setEnabled(true);
}

private void ExitButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Exit the program
System.exit(0);
}

private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void BButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void CButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void DButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void EButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void FButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void GButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void HButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void IButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void JButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void KButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void LButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void MButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void NButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void OButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void PButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void QButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void RButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void SButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void TButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void UButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void VButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void WButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void XButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void YButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void ZButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}

private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {
JButton button = (JButton) evt.getSource();
String currentLetter = button.getText();

//replace underscores with letters as they are guessed
do {
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
//if letter isn't in word
if (guessWord.indexOf(currentLetter) == -1) {
JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word.");
errors++;
if (errors == 1) {
Hangman0.setVisible(false);
}
if (errors == 2) {
Hangman1.setVisible(false);
}
if (errors == 3) {
Hangman2.setVisible(false);
}
if (errors == 4) {
Hangman3.setVisible(false);
}
if (errors == 5) {
Hangman4.setVisible(false);
}
if (errors == 6) {
Hangman5.setVisible(false);
}
if (errors == 7) {
Hangman6.setVisible(false);
}
if (errors == 8) {
Hangman7.setVisible(false);
}
if (errors == 9) {
Hangman8.setVisible(false);
}
if (errors == 10) {
Hangman9.setVisible(false);
JOptionPane.showMessageDialog(null, "You lost! The word was: " + guessWord);
losses++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
String strLosses = Integer.toString(losses);
String strWin = Integer.toString(wins);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
}
}
WordLabel.setText(foundWord.toUpperCase());
} while (foundWord == null);
if (foundWord.equalsIgnoreCase(guessWord)) {
JOptionPane.showMessageDialog(null, "Yay!");
wins++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
String strWin = Integer.toString(wins);
String strLosses = Integer.toString(losses);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
}

最佳答案

创建一个 Action 监听器:

ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (evt instanceof JButton) {
currentLetter = ((JButton) src).getText();
// do something with letter
} // else something seriously wrong
}
};

然后将此操作监听器添加到 alphabet 中的每个按钮:

for (JButton button : alphabet) {
button.addActionListener(al);
}

编辑 我在更新的代码中没有看到 initComponents() 的实现。无论如何,为每个按钮添加一个 Action 监听器只需要完成一次。以下是我开始实现 initComponents() 的方法:

private static String[] letters = { "A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z" };
private JButton[] letterButtons = new JButton[letters.length];

private void initComponents() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (evt instanceof JButton) {
currentLetter = ((JButton) src).getText();
// do something with letter
} // else something seriously wrong
}
};
for (int i = 0; i < letters.length; ++i) {
letterButtons[i] = new JButton(letters[i]);
letterButtons[i].addActionListener(al);
}
. . .
// add all the buttons to the user interface
. . .
}

请使用更多数组来简化您的代码!我当然不会为每个字母按钮提供单独的变量,也不会使用 26 个单独的方法来单独处理每个字母点击。

关于Java Hangman - 单击时如何为 JButton 分配字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com