Designing RMI Applications
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.rmi.*; public class BankClient { public static void main(String[] args) { (new BankClientFrame()).show(); } } public class BankClientFrame extends ExitingFrame { private JTextField _accountNameField; private JTextField _balanceTextField; private JTextField _withdrawalTextField; private JTextField _depositTextField; private Account _account; protected void buildGUI() { JPanel contentPane = new JPanel(new BorderLayout()); contentPane.add(buildActionPanel(), BorderLayout.CENTER); contentPane.add(buildBalancePanel(), BorderLayout.SOUTH); setContentPane(contentPane); setSize(250, 100); } private void resetBalanceField() { try { Money balance = _account.getBalance(); _balanceTextField.setText("Balance: " + balance.toString()); } catch (Exception e) { System.out.println("Error occurred while getting account balance\n" + e); } } private JPanel buildActionPanel() { JPanel actionPanel = new JPanel(new GridLayout(3, 3)); actionPanel.add(new JLabel("Account Name:")); _accountNameField = new JTextField(); actionPanel.add(_accountNameField); JButton getBalanceButton = new JButton("Get Balance"); getBalanceButton.addActionListener(new GetBalanceAction()); actionPanel.add(getBalanceButton); actionPanel.add(new JLabel("Withdraw")); _withdrawalTextField = new JTextField(); actionPanel.add(_withdrawalTextField); JButton withdrawalButton = new JButton("Do it"); withdrawalButton.addActionListener(new WithdrawAction()); actionPanel.add(withdrawalButton); actionPanel.add(new JLabel("Deposit")); _depositTextField = new JTextField(); actionPanel.add(_depositTextField); JButton depositButton = new JButton("Do it"); depositButton.addActionListener(new DepositAction()); actionPanel.add(depositButton); return actionPanel; } private JPanel buildBalancePanel() { JPanel balancePanel = new JPanel(new GridLayout(1, 2)); balancePanel.add(new JLabel("Current Balance:")); _balanceTextField = new JTextField(); _balanceTextField.setEnabled(false); balancePanel.add(_balanceTextField); return balancePanel; } private void getAccount() { try { _account = (Account) Naming.lookup(_accountNameField.getText()); } catch (Exception e) { System.out.println("Couldn't find account. Error was \n " + e); e.printStackTrace(); } return; } private void releaseAccount() { _account = null; } private Money readTextField(JTextField moneyField) { try { Float floatValue = new Float(moneyField.getText()); float actualValue = floatValue.floatValue(); int cents = (int) (actualValue * 100); return new PositiveMoney(cents); } catch (Exception e) { System.out.println("Field doesn't contain a valid value"); } return null; } private class GetBalanceAction implements ActionListener { public void actionPerformed(ActionEvent event) { try { getAccount(); resetBalanceField(); releaseAccount(); } catch (Exception exception) { System.out.println("Couldn't talk to account. Error was \n " + exception); exception.printStackTrace(); } } } private class WithdrawAction implements ActionListener { public void actionPerformed(ActionEvent event) { try { getAccount(); Money withdrawalAmount = readTextField(_withdrawalTextField); _account.makeWithdrawal(withdrawalAmount); _withdrawalTextField.setText(""); resetBalanceField(); releaseAccount(); } catch (Exception exception) { System.out.println("Couldn't talk to account. Error was \n " + exception); exception.printStackTrace(); } } } private class DepositAction implements ActionListener { public void actionPerformed(ActionEvent event) { try { getAccount(); Money depositAmount = readTextField(_depositTextField); _account.makeDeposit(depositAmount); _depositTextField.setText(""); resetBalanceField(); releaseAccount(); } catch (Exception exception) { System.out.println("Couldn't talk to account. Error was \n " + exception); exception.printStackTrace(); } } } }
25 of 49