Java 将多个按钮设置为禁用
我试图让它这样当用户点击一个按钮,它将成为禁用。我使用了以下代码来实现这一点:Java 将多个按钮设置为禁用,java,swing,Java,Swing,我试图让它这样当用户点击一个按钮,它将成为禁用。我使用了以下代码来实现这一点: final JButton die1 = new JButton(theModel.letters.get(0)); die1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent btn1){ d
final JButton die1 = new JButton(theModel.letters.get(0));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn1){
die1.setEnabled(false);
}
});
boggleGrid.add(die1);
model.letters.get(0)是一个字符串值,可以有效地工作。我的问题是,当我试图对同一boggleGrid JPanel中的其他按钮使用相同的代码时。我认为这可能与“final”语句有关,但是actionListener必须运行。以下是我的代码的其余部分:
JPanel boggleGrid = new JPanel(new GridLayout(4,4));
theModel.randomLetters();
final JButton die1 = new JButton(theModel.letters.get(0));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn1){
die1.setEnabled(false);
}
});
boggleGrid.add(die1);
final JButton die2 = new JButton(theModel.letters.get(1));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn2){
die2.setEnabled(false);
}
});
boggleGrid.add(die2);
final JButton die3 = new JButton(theModel.letters.get(2));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn3){
die3.setEnabled(false);
}
});
boggleGrid.add(die3);
final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn4){
die4.setEnabled(false);
}
});
boggleGrid.add(die4);
final JButton die5 = new JButton(theModel.letters.get(4));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn5){
die5.setEnabled(false);
}
});
boggleGrid.add(die5);
final JButton die6 = new JButton(theModel.letters.get(5));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn6){
die6.setEnabled(false);
}
});
boggleGrid.add(die6);
final JButton die7 = new JButton(theModel.letters.get(6));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn7){
die7.setEnabled(false);
}
});
boggleGrid.add(die7);
final JButton die8 = new JButton(theModel.letters.get(7));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn8){
die8.setEnabled(false);
}
});
boggleGrid.add(die8);
final JButton die9 = new JButton(theModel.letters.get(8));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn9){
die9.setEnabled(false);
}
});
boggleGrid.add(die9);
final JButton die10 = new JButton(theModel.letters.get(9));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn10){
die10.setEnabled(false);
}
});
boggleGrid.add(die10);
final JButton die11 = new JButton(theModel.letters.get(10));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn11){
die11.setEnabled(false);
}
});
boggleGrid.add(die11);
final JButton die12 = new JButton(theModel.letters.get(11));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn12){
die12.setEnabled(false);
}
});
boggleGrid.add(die12);
final JButton die13 = new JButton(theModel.letters.get(12));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn13){
die13.setEnabled(false);
}
});
boggleGrid.add(die13);
final JButton die14 = new JButton(theModel.letters.get(13));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn14){
die14.setEnabled(false);
}
});
boggleGrid.add(die14);
JButton die15 = new JButton(theModel.letters.get(14));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn15){
die15.setEnabled(false);
}
});
boggleGrid.add(die15);
JButton die16 = new JButton(theModel.letters.get(15));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn16){
die16.setEnabled(false);
}
});
boggleGrid.add(die16);
frame.add(boggleGrid, BorderLayout.CENTER);
背景:我正在做一个令人困惑的游戏(如果有帮助的话)。谢谢您在同一个
JButton
上多次调用addActionListener
,例如:
final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener() {
您正在创建一个名为die4
的按钮,然后将ActionListener
添加到die1
。在本例中,您希望对addActionListener
的调用发生在die4
上
final JButton die4 = new JButton(theModel.letters.get(3));
die4.addActionListener(new ActionListener() {
^^^^
下面是代码的一个实现,它更简洁,可能更易于维护:
JPanel boggleGrid = new JPanel(new GridLayout(4, 4));
ActionListener disableButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event)
{
// event.getSource() will return a reference to the control that
// fired the event. In this case, a JButton. We protect
// ourselves from a ClassCastException just in case though.
if (!(event.getSource() instanceof JButton)) {
return;
}
((JButton) event.getSource()).setEnabled(false);
}
};
theModel.randomLetters();
for (int i = 0; i < 16; i++) {
JButton button = new JButton(theModel.letters.get(i));
button.addActionListener(disableButtonListener);
boggleGrid.add(button);
}
frame.add(boggleGrid, BorderLayout.CENTER);
JPanel-boggleGrid=newjpanel(newgridlayout(4,4));
ActionListener disableButtonListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件)
{
//getSource()将返回对该控件的引用
//触发了事件。在本例中,是一个JButton。我们保护它
//不过,为了以防万一,我们必须避免类卡斯特例外。
if(!(event.getSource()instanceof JButton)){
返回;
}
((JButton)event.getSource()).setEnabled(false);
}
};
随机字母()模型;
对于(int i=0;i<16;i++){
jbuttonbutton=newjbutton(model.letters.get(i));
addActionListener(disableButtonListener);
boggleGrid.add(按钮);
}
frame.add(boggleGrid,BorderLayout.CENTER);
您在同一个JButton
上多次调用addActionListener
,例如:
final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener() {
您正在创建一个名为die4
的按钮,然后将ActionListener
添加到die1
。在本例中,您希望对addActionListener
的调用发生在die4
上
final JButton die4 = new JButton(theModel.letters.get(3));
die4.addActionListener(new ActionListener() {
^^^^
下面是代码的一个实现,它更简洁,可能更易于维护:
JPanel boggleGrid = new JPanel(new GridLayout(4, 4));
ActionListener disableButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event)
{
// event.getSource() will return a reference to the control that
// fired the event. In this case, a JButton. We protect
// ourselves from a ClassCastException just in case though.
if (!(event.getSource() instanceof JButton)) {
return;
}
((JButton) event.getSource()).setEnabled(false);
}
};
theModel.randomLetters();
for (int i = 0; i < 16; i++) {
JButton button = new JButton(theModel.letters.get(i));
button.addActionListener(disableButtonListener);
boggleGrid.add(button);
}
frame.add(boggleGrid, BorderLayout.CENTER);
JPanel-boggleGrid=newjpanel(newgridlayout(4,4));
ActionListener disableButtonListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件)
{
//getSource()将返回对该控件的引用
//触发了事件。在本例中,是一个JButton。我们保护它
//不过,为了以防万一,我们必须避免类卡斯特例外。
if(!(event.getSource()instanceof JButton)){
返回;
}
((JButton)event.getSource()).setEnabled(false);
}
};
随机字母()模型;
对于(int i=0;i<16;i++){
jbuttonbutton=newjbutton(model.letters.get(i));
addActionListener(disableButtonListener);
boggleGrid.add(按钮);
}
frame.add(boggleGrid,BorderLayout.CENTER);
我尝试了一个基本循环,唯一的问题是命名循环中的按钮。不过,我会考虑使用数组,干杯。我用一个基本循环尝试过,唯一的问题是命名循环中的按钮。不过我会考虑使用数组,干杯。你会如何更改它们?我想为每个新按钮更改(ActionEvent btn#)
会有这种效果吗?如果没有,怎么做?@SemicolonCapitalD ActionEvent的名称无关紧要,您必须执行die5.addActionListener(新ActionListener(){
,例如die5.Swing操作为什么在官方APIsHow中实施?您会更改它们吗?我想更改(ActionEvent btn#)
对于每个新按钮都会有这种效果?如果没有,如何?@分号。ActionEvent的名称无关紧要,您必须执行die5.addActionListener(例如,对于die5.addActionListener(){
。Swing操作在官方API中实现的原因