Java 从vector创建的JButton上的actionListener
我一直在网上搜索我具体基本问题的答案,但找不到答案。 我必须说我是编程新手,我必须为学校做这件事。 我已经创建了一个6/49彩票的界面,在这里你必须点击6个按钮,创建你的“幸运”号码。在我的interface.java中,我通过以下方式创建了我的按钮:Java 从vector创建的JButton上的actionListener,java,swing,vector,jbutton,actionlistener,Java,Swing,Vector,Jbutton,Actionlistener,我一直在网上搜索我具体基本问题的答案,但找不到答案。 我必须说我是编程新手,我必须为学校做这件事。 我已经创建了一个6/49彩票的界面,在这里你必须点击6个按钮,创建你的“幸运”号码。在我的interface.java中,我通过以下方式创建了我的按钮: JButton b; for (i = 1; i <= 49; i ++) { String s = String.valueOf(i);
JButton b;
for (i = 1; i <= 49; i ++)
{
String s = String.valueOf(i);
b = new JButton(s);
if (i % 2 == 0)
b.setForeground(new Color(3, 121, 184));
else
b.setForeground(new Color(228, 44, 44));
choixNumero.add(b);
这是我的密码:
private int [] nums;
private int nbRestant = 6;
private class EcouteurCombinaison implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
if (nbRestant > 0)
{
//nums[nbRestant] = indexOf(e)); //will have to find a way to get index of the button pressed
nbRestant --;
intProjet.valNbRestant.setText("" + nbRestant);
}
else
{
JOptionPane.showMessageDialog(null, "Vous avez choisis vos 6 numéros\n Cliquer sur Soumettre pour valider", "Information", JOptionPane.INFORMATION_MESSAGE);
}
}
}
所以基本上,每次按下按钮时,我都会尝试将我的JButton的索引或值添加到向量中。然后我将把它发送到另一个.java
我已经为我的代码实现了其他actionListener,它们工作得很好(JButton、RadioButton、JComboBox)。我不明白为什么当我点击按钮时什么都没发生
我试图尽可能清楚地说明这一点,而不粘贴所有代码
编辑:ActionListener仅使用最后一个按钮(49)。如何让它收听所有b按钮?您在该循环中不断重新分配
b
的值。循环完成后,将为其指定要创建的最后一个JButton
。然后将ActionListener绑定到该按钮,但其他按钮都不绑定。我不知道为什么您希望通过调用intProjet.b.addActionListener()
将其添加到所有jbutton中。您在该循环中不断重新分配b
的值。循环完成后,将为其指定要创建的最后一个JButton
。然后将ActionListener绑定到该按钮,但其他按钮都不绑定。我不知道为什么您希望通过调用intProjet.b.addActionListener()
将其添加到所有JButton中。intProjet.b
引用循环中创建的最后一个按钮,因此结果是预期的。相反,您可以为每个按钮提供其自己的侦听器实例,如图所示。intProjet.b
指的是在循环中创建的最后一个按钮,因此结果是预期的。相反,您可以为每个按钮提供其自己的侦听器实例,如图所示。可能EcoteurCombinaison.actionPerformed会引发异常。控制台中是否有任何错误消息?另外,那是什么indexOf(e))
?我在运行它时没有错误。唯一的“坏”部分是:nums[nbRestant]=indexOf(e));所以我把//放在前面,一切都很好。indexOf(e))是一种尝试,它试图获取按下的JButton的索引,将索引添加到向量nums[]是的,这是不好的,因为它不是正确的Java。如果我们忘记了indexOf(e)),如果我在EcoutEurCombination中插入JOPmessageDialog,它就不会出现。似乎无法识别JButton b。可能EcoteurCombinaison.actionPerformed引发异常。控制台中是否有任何错误消息?另外,那是什么indexOf(e))
?我在运行它时没有错误。唯一的“坏”部分是:nums[nbRestant]=indexOf(e));所以我把//放在前面,一切都很好。indexOf(e))是一种尝试,它试图获取按下的JButton的索引,将索引添加到向量nums[]是的,这是不好的,因为它不是正确的Java。如果我们忘记了indexOf(e)),如果我在EcoutEurCombination中插入JOPmessageDialog,它就不会出现。看起来JButton b不被识别。这很有道理。我正在阅读您的代码并试图理解所有内容。感谢您指出为什么它只使用最后一个JButton。我理解您的大部分方法,但我不知道如何使用它。我的侦听器和按钮不在同一个java文件中。我是否可以将JButton引用到我的另一个java文件侦听器,并且每次生成它时都引用它?对不起,如果是模糊的。(英语不是我的主要语言)是的,您的按钮可以访问EcouteurCombinaison
。也要考虑。这是感觉。我正在阅读你的代码,试图了解一切。感谢您指出为什么它只使用最后一个JButton。我理解您的大部分方法,但我不知道如何使用它。我的侦听器和按钮不在同一个java文件中。我是否可以将JButton引用到我的另一个java文件侦听器,并且每次生成它时都引用它?对不起,如果是模糊的。(英语不是我的主要语言)是的,您的按钮可以访问EcouteurCombinaison
。也要考虑。我很难将它提到所有的B元素。初学者的错误。我会记住,它将涉及所有b元素。初学者的错误。我会记得的
private int [] nums;
private int nbRestant = 6;
private class EcouteurCombinaison implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
if (nbRestant > 0)
{
//nums[nbRestant] = indexOf(e)); //will have to find a way to get index of the button pressed
nbRestant --;
intProjet.valNbRestant.setText("" + nbRestant);
}
else
{
JOptionPane.showMessageDialog(null, "Vous avez choisis vos 6 numéros\n Cliquer sur Soumettre pour valider", "Information", JOptionPane.INFORMATION_MESSAGE);
}
}
}