【问题标题】:JLabel and swap the text it holds via the JLabel's setText(...) methodJLabel 并通过 JLabel 的 setText(...) 方法交换它保存的文本
【发布时间】:2014-05-23 12:14:21
【问题描述】:

问题字段应包含 36 个问题,这些问题的答案在网格中的 36 个按钮上。

我在获取问题字段以显示 36 个问题时遇到问题

那么我如何获得一个问题 JLabel 并通过 JLabel 的 setText(...) 方法交换它保存的文本

这是我的代码

import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
class NewClass {
    final int ROWS = 6;
    final int COLUMNS = 6;
    JButton[] buttons = new JButton[ROWS*COLUMNS];
    JLabel statusLabel = new JLabel("",JLabel.CENTER);
    java.util.List<Integer> buttonNumbers = new ArrayList<Integer>();
    int buttonCounter = 1;
    public NewClass()  {
        JPanel buttonPanel = new JPanel(new GridLayout(ROWS,COLUMNS));
        ButtonListener listener = new ButtonListener(NewClass.this);
        for(int x = 0, y = ROWS*COLUMNS; x < y; x++){
            buttons[x] = new JButton();
            buttons[x].addActionListener(listener);
            buttonPanel.add(buttons[x]);
            buttonNumbers.add(new Integer(x+1));
        }
        reset();
        JFrame frame = new JFrame();
        frame.getContentPane().add(statusLabel,BorderLayout.NORTH);
        frame.getContentPane().add(buttonPanel,BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    public void reset(){
        Collections.shuffle(buttonNumbers);
        for(int x = 0, y = ROWS*COLUMNS; x < y; x++){
            buttons[x].setText(String.valueOf(buttonNumbers.get(x)));
        }
        buttonCounter = 1;
        statusLabel.setText("what is 0+ 1  " + buttonCounter);
    }
    public static void main(String[] args) {
        new NewClass();
    }
}
class ButtonListener implements ActionListener {
    NewClass gui;
    ButtonListener(NewClass g){
        gui = g;
    }
    public void actionPerformed(ActionEvent e) {
        JButton buttonClicked = (JButton)e.getSource();
        int clickedNumber = Integer.parseInt(buttonClicked.getText());
        if(clickedNumber == gui.buttonCounter){
            gui.buttonCounter++;
            buttonClicked.setText("");//optional - clears correct selection
            if(gui.buttonCounter > gui.ROWS*gui.COLUMNS) gui.reset();
            gui.statusLabel.setText("what is 0+ 1" + gui.buttonCounter);
        }
        else {
            gui.reset();
            gui.statusLabel.setText("Incorrect button clicked, start again: what is 0+ 1");
        }
    }
}

【问题讨论】:

  • java swing labels changing 的可能重复项
  • 不同的问题!!你只是在玩游戏,对实际答案没有帮助
  • 有什么区别?

标签: java arrays swing jbutton


【解决方案1】:

在动作监听器中更改一行代码。改变这个:

gui.statusLabel.setText("what is 0+ 1" + gui.buttonCounter);

到这里:

gui.statusLabel.setText("what is " + gui.buttonCounter + "+ 1");

现在它会问:

  • 0+1是什么

  • 什么是1+1

  • 什么是 2+1

  • 什么是 3+1

    ..................................

  • 什么是 1937655087345+ 1

【讨论】:

  • 即使点击了正确的答案按钮,游戏也会继续点击不正确的按钮,重新开始:0 + 1 在我将代码更改为您在答案中建议的内容后
  • 我看不出问题出在哪里。稍后我会尝试弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2014-04-09
  • 2013-08-08
  • 1970-01-01
相关资源
最近更新 更多