1

如何打印用户单击的按钮的字母,然后禁用该按钮

我使用 for 循环生成每个字母的按钮

   } for (int i = 65; i <= 90; i++) {
        btnLetters = new JButton(" " + (char) i);
        letterJPanel.add(btnLetters);
        letterJPanel.setLayout(new FlowLayout());
        btnLetters.addActionListener(this);

    }

单击按钮时,它应该打印字母,然后禁用按钮

public void actionPerformed(ActionEvent ae) {

    if (ae.getSource() == btnLetters) {

    }
}
4

4 回答 4

1
if (ae.getSource() == btnLetters) { } }

这部分仅适用于创建的最后一个按钮,所以我认为它毫无意义。

最好做这样的事情

if (ae.getSource() instance of JButton &&
    ((JButton ) ae.getSource()).getText().length()==2) {
    PRINT(((JButton ) ae.getSource()).getText().substring(1));
    ((JButton ) ae.getSource()).setEnabled(false);
}

其中 PRINT 是实际的打印(但是你这样做)

于 2012-09-04T08:01:11.193 回答
1

创建一个新类

public class ButtonDisabler implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton)e.getSource();
        System.out.println(button.getText() + " pressed");
        button.setEnabled(false);
    }
}

然后将其添加到每个按钮

btnLetters.addActionListener(new ButtonDisabler());
于 2012-09-04T08:07:59.997 回答
1

首先,我会这样做:(比从整数转换要好得多)

for(char c = 'A'; c <= 'Z'; c++)
{
    button.setText(""+c);
    ...
}

然后

public void actionPerformed(ActionEvent ae) 
{
    //assuming you only set the action for the JButtons with letters
    JButton button = (JButton) ae.getSource();
    String letter = button.getText();
    print(letter); //for example System.out.println();
    button.setEnabled(false);
}
于 2012-09-04T08:08:45.940 回答
0

也许使用内部类会更容易

创建按钮时。

JButton button = new JButton("A");
button.addActionListener(new ActionListener(
    public void actionPerformed(ActionEvent e){
      printMethod(button.getLabel()); //You have to implement this...
      this.disable()
});
于 2012-09-04T08:05:46.103 回答