BalanceLookupCantCancel.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:3k
源码类别:

进程与线程

开发平台:

Java

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class BalanceLookupCantCancel extends JPanel {
  5. private JTextField acctTF;
  6. private JTextField pinTF;
  7. private JButton searchB;
  8. private JButton cancelB;
  9. private JLabel balanceL;
  10. public BalanceLookupCantCancel() {
  11. buildGUI();
  12. hookupEvents();
  13. }
  14. private void buildGUI() {
  15. JLabel acctL = new JLabel("Account Number:");
  16. JLabel pinL = new JLabel("PIN:");
  17. acctTF = new JTextField(12);
  18. pinTF = new JTextField(4);
  19. JPanel dataEntryP = new JPanel();
  20. dataEntryP.setLayout(new FlowLayout(FlowLayout.CENTER));
  21. dataEntryP.add(acctL);
  22. dataEntryP.add(acctTF);
  23. dataEntryP.add(pinL);
  24. dataEntryP.add(pinTF);
  25. searchB = new JButton("Search");
  26. cancelB = new JButton("Cancel Search");
  27. cancelB.setEnabled(false);
  28. JPanel innerButtonP = new JPanel();
  29. innerButtonP.setLayout(new GridLayout(1, -1, 5, 5));
  30. innerButtonP.add(searchB);
  31. innerButtonP.add(cancelB);
  32. JPanel buttonP = new JPanel();
  33. buttonP.setLayout(new FlowLayout(FlowLayout.CENTER));
  34. buttonP.add(innerButtonP);
  35. JLabel balancePrefixL = new JLabel("Account Balance:");
  36. balanceL = new JLabel("BALANCE UNKNOWN");
  37. JPanel balanceP = new JPanel();
  38. balanceP.setLayout(new FlowLayout(FlowLayout.CENTER));
  39. balanceP.add(balancePrefixL);
  40. balanceP.add(balanceL);
  41. JPanel northP = new JPanel();
  42. northP.setLayout(new GridLayout(-1, 1, 5, 5));
  43. northP.add(dataEntryP);
  44. northP.add(buttonP);
  45. northP.add(balanceP);
  46. setLayout(new BorderLayout());
  47. add(northP, BorderLayout.NORTH);
  48. }
  49. private void hookupEvents() {
  50. searchB.addActionListener(new ActionListener() {
  51. public void actionPerformed(ActionEvent e) {
  52. search();
  53. }
  54. });
  55. cancelB.addActionListener(new ActionListener() {
  56. public void actionPerformed(ActionEvent e) {
  57. cancelSearch();
  58. }
  59. });
  60. }
  61. private void search() {
  62. // better be called by event thread!
  63. searchB.setEnabled(false);
  64. cancelB.setEnabled(true);
  65. balanceL.setText("SEARCHING ...");
  66. // get a snapshot of this info in case it changes
  67. String acct = acctTF.getText();
  68. String pin = pinTF.getText();
  69. String bal = lookupBalance(acct, pin);
  70. setBalance(bal);
  71. }
  72. private String lookupBalance(String acct, String pin) {
  73. try {
  74. // Simulate a lengthy search that takes 5 seconds
  75. // to communicate over the network.
  76. Thread.sleep(5000);
  77. // result "retrieved", return it
  78. return "1,234.56";
  79. } catch ( InterruptedException x ) {
  80. return "SEARCH CANCELLED";
  81. }
  82. }
  83. private void setBalance(String newBalance) {
  84. // better be called by event thread!
  85. balanceL.setText(newBalance);
  86. cancelB.setEnabled(false);
  87. searchB.setEnabled(true);
  88. }
  89. private void cancelSearch() {
  90. System.out.println("in cancelSearch()");
  91. // Here's where the code to cancel would go if this
  92. // could ever be called!
  93. }
  94. public static void main(String[] args) {
  95. BalanceLookupCantCancel bl = 
  96. new BalanceLookupCantCancel();
  97. JFrame f = new JFrame("Balance Lookup - Can't Cancel");
  98. f.addWindowListener(new WindowAdapter() {
  99. public void windowClosing(WindowEvent e) {
  100. System.exit(0);
  101. }
  102. });
  103. f.setContentPane(bl);
  104. f.setSize(400, 150);
  105. f.setVisible(true);
  106. }
  107. }