ActionPerformed 中的 Switch Case?
Switch Case In ActionPerformed?
我检查了一些堆栈溢出问题并找到了 this 个类似的问题。
据我所知,在 actionPerformed 方法中为此上下文使用 switch 语句将不起作用,需要 if-else 语句。
有没有更有效的方法来做到这一点而无需重复代码?我听说我可以使用 Abstract Action 为多个按钮提供相同的操作,但我还不知道如何正确使用它。
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == loginButton){
cardLayout.show(cards, LOGIN_PANEL);
}
else if(e.getSource() == signUpButton){
cardLayout.show(cards, SIGN_UP_PANEL);
}
else if(e.getSource() == transactionHistoryButton){
cardLayout.show(cards,TABLE_PANEL);
}
else if(e.getSource() == depositButton){
cardLayout.show(cards, DEPOSIT_PANEL);
}
else if(e.getSource() == withdrawButton){
cardLayout.show(cards, WITHDRAW_PANEL);
}
else if(e.getSource() == checkBalanceButton){
cardLayout.show(cards,BALANCE_PANEL);
}
else if(e.getSource() == logout){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP1){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP2){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP3){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP4){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP5){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP6){
cardLayout.show(cards, UNLOCKED_PANEL);
}
}
From what I understand using a switch statement in an actionPerformed method for this context will not work and an if-else statement is required.
不要尝试使用 switch 语句或嵌套的 if/else 语句。这表明设计不佳。
Is there a more efficient way to do this without having repetitive code?
如果您想为所有按钮共享相同的 ActionListener
,那么您需要编写一个通用的 ActionListener
。
类似于:
ActionListener al = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
cardLayout.show(cards, command)
}
}
然后当您创建按钮时,您将使用:
JButton loginButton = new JButton("Login");
loginButton.setActionCommand(LOGIN_PANEL);
loginButton.addActionListener( al );
或者您可以使用 Java lambda 轻松地为每个按钮创建一个唯一的 ActionListener
。类似于:
loginButton.addActionListener((e) -> cardLayout.show(cards, LOGIN_PANEL));
I've heard I could use Abstract Action to give multiple buttons the same action
您将使用 Action
来提供独特的功能。 Action
的好处是它可以由不同的组件共享,例如 JButton
或 JMenuItem
,以执行相同的操作。
阅读 Swing 教程中关于 How to Use Action 的部分,了解使用 Action 而不是 ActionListener 的好处。
我检查了一些堆栈溢出问题并找到了 this 个类似的问题。
据我所知,在 actionPerformed 方法中为此上下文使用 switch 语句将不起作用,需要 if-else 语句。
有没有更有效的方法来做到这一点而无需重复代码?我听说我可以使用 Abstract Action 为多个按钮提供相同的操作,但我还不知道如何正确使用它。
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == loginButton){
cardLayout.show(cards, LOGIN_PANEL);
}
else if(e.getSource() == signUpButton){
cardLayout.show(cards, SIGN_UP_PANEL);
}
else if(e.getSource() == transactionHistoryButton){
cardLayout.show(cards,TABLE_PANEL);
}
else if(e.getSource() == depositButton){
cardLayout.show(cards, DEPOSIT_PANEL);
}
else if(e.getSource() == withdrawButton){
cardLayout.show(cards, WITHDRAW_PANEL);
}
else if(e.getSource() == checkBalanceButton){
cardLayout.show(cards,BALANCE_PANEL);
}
else if(e.getSource() == logout){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP1){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP2){
cardLayout.show(cards, OPTION_PANEL);
}
else if(e.getSource() == backButtonP3){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP4){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP5){
cardLayout.show(cards, UNLOCKED_PANEL);
}
else if(e.getSource() == backButtonP6){
cardLayout.show(cards, UNLOCKED_PANEL);
}
}
From what I understand using a switch statement in an actionPerformed method for this context will not work and an if-else statement is required.
不要尝试使用 switch 语句或嵌套的 if/else 语句。这表明设计不佳。
Is there a more efficient way to do this without having repetitive code?
如果您想为所有按钮共享相同的 ActionListener
,那么您需要编写一个通用的 ActionListener
。
类似于:
ActionListener al = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
cardLayout.show(cards, command)
}
}
然后当您创建按钮时,您将使用:
JButton loginButton = new JButton("Login");
loginButton.setActionCommand(LOGIN_PANEL);
loginButton.addActionListener( al );
或者您可以使用 Java lambda 轻松地为每个按钮创建一个唯一的 ActionListener
。类似于:
loginButton.addActionListener((e) -> cardLayout.show(cards, LOGIN_PANEL));
I've heard I could use Abstract Action to give multiple buttons the same action
您将使用 Action
来提供独特的功能。 Action
的好处是它可以由不同的组件共享,例如 JButton
或 JMenuItem
,以执行相同的操作。
阅读 Swing 教程中关于 How to Use Action 的部分,了解使用 Action 而不是 ActionListener 的好处。