2013-07-24 11 views
1

Так вот мой вопрос:Изменение панели при нажатии кнопки

Я хотел бы создать новую панель, которая просит пользователя ввести Банковские реквизиты (имя учетной записи и номер счета), и когда пользователь нажимает на кнопке «Вход» она меняет панели на панель «Снятие/Депозит», а также отображает имя учетной записи вверху. Я Withdraw/Панель Депозит все завершено, но я озадачен о том, как создать панель информации и сделать его предстать перед Withdraw/Панель вкладов и т.д.

Вот мой код:

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 Он включает в себя необходимость делать все это, но его будет намного легче читать и поддерживать. Кроме того, это действительно много копий/паст от старого класса к новому. –

Смежные вопросы