我有一个从A-Z创建按钮的数组,但我想在方法返回按下的按钮。
这是我的按钮原始代码:
String b[]={"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"};
for(i = 0; i < buttons.length; i++)
{
buttons[i] = new JButton(b[i]);
buttons[i].setSize(80, 80);
buttons[i].setActionCommand(b[i]);
buttons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String choice = e.getActionCommand();
JOptionPane.showMessageDialog(null, "You have clicked: "+choice);
}
});
panel.add(buttons[i]);
}
我不确定你的问题到底是什么,所以我有几个答案:
-
如果您想将按钮创建拉到一个方法中,请参阅示例中的
getButton
方法 -
如果要在单击实际按钮时访问该按钮,可以使用
ActionEvent.getSource()
方法(未显示)或在声明期间将该按钮标记为final(如示例所示)。从那里你可以用按钮做任何你想做的事。 -
如果你的问题是"我如何创建一个方法,它接受一个字母数组并返回给我最后点击的按钮",你应该修改你的问题,明确地说。我在这里没有回答这个问题,因为除非你有非常特殊的情况,否则这可能不是解决你正在处理的问题的好方法。你可以解释为什么你需要这样做,我们可以提出更好的替代方案。
示例:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TempProject extends Box{
/** Label to update with currently pressed keys */
JLabel output = new JLabel();
public TempProject(){
super(BoxLayout.Y_AXIS);
for(char i = 'A'; i <= 'Z'; i++){
String buttonText = new Character(i).toString();
JButton button = getButton(buttonText);
add(button);
}
}
public JButton getButton(final String text){
final JButton button = new JButton(text);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "You have clicked: "+text);
//If you want to do something with the button:
button.setText("Clicked"); // (can access button because it's marked as final)
}
});
return button;
}
public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane(new TempProject());
frame.pack();
frame.setVisible(true);
new TempProject();
}
});
}
}
-
ActionListener
可以返回(Swing中的每个Listeners
)代表JButton
的Object
-
从该
JButton
可以确定getActionCommand()
或getText()
我不确定您到底想要什么,但将密钥存储在队列中(例如Deque<String>
)以及任何需要轮询已按下按钮的方法会查询该队列。这样你也可以得到按钮按下的顺序。
或者,您可以在每个按钮(或调度事件的中心按钮)上注册其他动作侦听器,这些按钮在触发事件时接收事件。我可能更喜欢这种方法,但这取决于你的确切要求。
尝试将Action监听器更改为此
JOptionPane.showMessageDialog(null, "You have clicked: "+((JButton)e.getSource()).getText());
1。首先,当您要创建按钮时,请将其上的文本从A设置为Z。
2.现在,当GUI准备就绪,并且您单击按钮时,提取按钮上的文本,然后显示您单击此按钮的消息。
例如:
我向你展示,你将如何提取按下按钮的名称,我正在使用getText()
方法
butt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null, "You have clicked: "+butt.getText());
}
});