2013-07-24 76 views
1

时,因此,这里是我的问题:改变面板的按钮被点击

我想创建要求用户输入银行账户信息(开户名称和账号)的新面板和用户点击时在登录按钮上,它将面板更改为提取/存款面板,并在顶部显示您的帐户名称。我已经抽取/存款面板全部完成,但我难倒如何创建信息面板,并使它看起来抽取/存款面板之前,等

这里是我的代码:

public class MyFrame extends JFrame { 

    private JPanel panel; 
    private JLabel wordsLabel; 
    private JLabel balanceLabel; 
    private JLabel choiceLabel; 
    private JTextField transactionAmount; 
    private JRadioButton depositButton; 
    private JRadioButton withdrawButton; 
    private double balance; 

    public MyFrame() { 
     final int FIELD_WIDTH = 5; 
     balance = 500; 
     panel = new JPanel(); 
     wordsLabel = new JLabel(); 
     balanceLabel = new JLabel(); 
     choiceLabel = new JLabel(); 
     transactionAmount = new JTextField(FIELD_WIDTH); 
     JPanel buttonPanel = new JPanel(); 
     ButtonGroup myGroup = new ButtonGroup(); 
     depositButton = new JRadioButton("Deposit"); 
     withdrawButton = new JRadioButton("Withdraw"); 
     transactionAmount.setText("0"); 
     wordsLabel.setText("Welcome to Wes Banco! Your current balance is: "); 
     balanceLabel.setText(String.format("%10.2f", balance)); 
     choiceLabel.setText("How much would you like to deposit/withdraw? "); 
     panel.setLayout(new GridLayout(4, 4, 5, 10)); 
     panel.add(wordsLabel); 
     panel.add(balanceLabel); 
     panel.add(choiceLabel); 
     panel.add(transactionAmount); 
     myGroup.add(depositButton); 
     myGroup.add(withdrawButton); 
     buttonPanel.add(depositButton); 
     buttonPanel.add(withdrawButton); 
     ButtonListener myListener = new ButtonListener(); 
     depositButton.addActionListener(myListener); 
     withdrawButton.addActionListener(myListener);  
     panel.add(buttonPanel); 
     this.add(panel); 
    } 

    class ButtonListener implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      double amount = Double.parseDouble(transactionAmount.getText()); 
      if (amount == 0) { 
       JOptionPane.showMessageDialog(null, 
         "You cannot deposit or withdraw nothing!"); 
       JOptionPane.showMessageDialog(null, 
         "Please enter a valid amount."); 
      } else { 
       if (event.getSource() == depositButton) { 
        JOptionPane.showMessageDialog(null, 
          "You have deposited: " + amount); 
        balance += amount; 
       } else if (event.getSource() == withdrawButton) { 
        if (balance < amount) { 
         JOptionPane.showMessageDialog(null, 
           "You do not have sufficient funds to complete this transaction."); 
         JOptionPane.showMessageDialog(null, 
           "Please enter a valid amount."); 
        } else { 
         JOptionPane.showMessageDialog(null, 
           "You have withdrawn: " + amount); 
         balance -= amount; 
        } 
       } 
       balanceLabel.setText(String.valueOf(balance)); 
      } 
     } 
    } 
} 
+1

请考虑使用[CardLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html),如[示例]中所示(http://stackoverflow.com/a/ 9349137/1057230) –

回答

1

我的建议是:不要在JFrame构造函数中创建面板。创建一个InfoPanel类和一个WithdrawPanel类。然后,您可以通过编程方式决定在您的框架中显示哪个面板。

+0

包括我不会基本上重做整个事情吗? –

+0

我喜欢这种方式,涉及__分离的关注点___ +1 :-) –

+0

@vVvSintherius它包括必须做的整件事情,但它会更容易阅读和维护。另外,从旧类到新类的复制/粘贴都非常多。 –