2012-04-10 39 views
2

我目前正在開發預訂系統作爲我的學位課程。按下按鈕後禁用選定JToggle按鈕的最佳方法是什麼?所以購買後座位將不可用。我曾嘗試使用for循環和數組,但在檢索按下哪個按鈕時遇到了一些麻煩。這是我的代碼,如果你能更好地理解它,請運行它。Java:在提交後禁用所有JToggleButtons - setEnabled(false);

PS:我沒有使用數據庫。

謝謝。

// CM1203 Fundamentals of Computing with Java; Second Assignement. 
// Walter Carvalho - C1001984; 2012. 
// Cardiff University 

// Load Libraries 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.*; 
import java.text.*; 

public class cinemaSystem extends JFrame implements ActionListener { 
    // Global Variables 
    boolean lselected, rselected, mselected; 
    double chargeDue; 
    int a, b, c; 
    static Ticket oapticket, childticket, adultticket; 
    JFrame frame = new JFrame(); // Creates JFrame 
    JLabel title, lchild, ladult, loap, ltotalprice, time; 
    JTextField child, adult, oap, totalprice; 
    JButton submit; 
    JRadioButton time1, time2, time3, time4, time5; // Radio Butons 
    JToggleButton l[][], m[][], r[][]; // Names grid of JButtons 
    JPanel panel1, panel2, panel3, panel4, panel5, panel6; 
    ArrayList<String> seatsAvailable = new ArrayList<String>(); 
    ArrayList<String> coupon = new ArrayList<String>(); 

    // Constructor 
    public cinemaSystem(){ 

      title = new JLabel("Cinema Booking System"); 
      title.setFont(new Font("Helvetica", Font.BOLD, 30)); 
      title.setLocation(12,5); 
      title.setSize(600, 60); 

      frame.setLayout(null); // Setting Grid Layout 
      // panel1.setLayout(new GridLayout(seat,row)); 
      l = new JToggleButton[4][4]; // Allocating Size of Grid 
      panel1 = new JPanel(new GridLayout(4,4)); 
      panel1.setBounds(20, 95, 220, 140); 
      for(int y = 0; y <4 ; y++){ 
        for(int x = 0; x < 4; x++){ 
         l[x][y] = new JToggleButton("L" + y + x); // Creates New JButton 
         l[x][y].addActionListener(this); 
         seatsAvailable.add("L" + y + x); 
         panel1.add(l[x][y]); //adds button to grid 
        } 
      } 

      m = new JToggleButton[4][2]; // Allocating Size of Grid 
      panel2 = new JPanel(new GridLayout(2,4)); 
      panel2.setBounds(240, 165, 220, 70); 
      for(int y = 0; y <2 ; y++){ 
        for(int x = 0; x < 4; x++){ 
         m[x][y] = new JToggleButton("M" + y + x); // Creates New JButton 
         m[x][y].addActionListener(this); 
         seatsAvailable.add("M" + y + x); 
         panel2.add(m[x][y]); //adds button to grid 
        } 
      } 

      r = new JToggleButton[4][4]; // Allocating Size of Grid 
      panel3 = new JPanel(new GridLayout(4,4)); 
      panel3.setBounds(460, 95, 220, 140); 
      for(int y = 0; y <4 ; y++){ 
        for(int x = 0; x < 4; x++){ 
         r[x][y] = new JToggleButton("R" + y + x); // Creates New JButton 
         r[x][y].addActionListener(this); 
         seatsAvailable.add("R" + y + x); 
         panel3.add(r[x][y]); //adds button to grid 
        } 
      } 

      panel4 = new JPanel(new FlowLayout()); 
      panel4.setBounds(0, 250, 300, 70); 

      lchild = new JLabel("Child"); 
      child = new JTextField("0", 2); 
      child.addActionListener(this); 

      ladult = new JLabel("Adult"); 
      adult = new JTextField("0", 2); 
      adult.addActionListener(this); 

      loap = new JLabel("OAP"); 
      oap = new JTextField("0", 2); 
      oap.addActionListener(this); 

      submit = new JButton("Submit"); 
      submit.addActionListener(this); 

      oapticket = new Ticket(4.70); 
      childticket = new Ticket(3.50); 
      adultticket = new Ticket(6.10);  

      child.addKeyListener(new MyKeyAdapter()); 
      oap.addKeyListener(new MyKeyAdapter()); 
      adult.addKeyListener(new MyKeyAdapter()); 

      panel4.add(lchild); 
      panel4.add(child); 
      panel4.add(ladult); 
      panel4.add(adult); 
      panel4.add(loap); 
      panel4.add(oap); 
      panel4.add(submit); 

      panel5 = new JPanel(new FlowLayout()); 
      panel5.setBounds(240, 250, 300, 70); 

      ltotalprice = new JLabel("Charge Due (£): "); 
      totalprice = new JTextField("£0.00", 5); 
      totalprice.setEnabled(false); 
      panel5.add(ltotalprice); 
      panel5.add(totalprice); 

      panel6 = new JPanel(new FlowLayout()); 
      panel6.setBounds(0, 55, 560, 30); 

      time = new JLabel("Please select a film time: "); 
      time1 = new JRadioButton("13:00", true); 
      time2 = new JRadioButton("15:00", false); 
      time3 = new JRadioButton("17:00", false); 
      time4 = new JRadioButton("19:00", false); 
      time5 = new JRadioButton("21:00", false); 

      ButtonGroup group = new ButtonGroup(); 
      group.add(time1); 
      group.add(time2); 
      group.add(time3); 
      group.add(time4); 
      group.add(time5); 
      panel6.add(time); 
      panel6.add(time1); 
      panel6.add(time2); 
      panel6.add(time3); 
      panel6.add(time4); 
      panel6.add(time5); 
      time1.addActionListener(this); 
      time2.addActionListener(this); 
      time3.addActionListener(this); 
      time4.addActionListener(this); 
      time5.addActionListener(this); 
      frame.add(title); 
      frame.add(panel1); 
      frame.add(panel2); 
      frame.add(panel3); 
      frame.add(panel4); 
      frame.add(panel5); 
      frame.add(panel6); 
      frame.setPreferredSize(new Dimension(700, 350)); 
      frame.setTitle("Cinema Booking"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.pack(); //sets appropriate size for frame 
      frame.setVisible(true); //makes frame visible 


    } 

    // Calculates Charge Due for current transaction. 
    public double calcChargeDue(){ 
     DecimalFormat df = new DecimalFormat("#.##"); 
     double chargeDue = 0.0; 
     chargeDue = (a*childticket.price) + (b*oapticket.price) + (c*adultticket.price); 
     totalprice.setText("£"+df.format(chargeDue)); 
     return chargeDue; 
    } 

    // Method to check if the number of people matches the number of seats selected. 
    public void check(){ 
     int check = coupon.size(); 
     int noTickets = a + b + c; 
     if (check != noTickets){ 
      submit.setEnabled(false); 
     } 
     else { 
      submit.setEnabled(true); 
     } 

    } 

    // Ticket Object 
    public class Ticket { 

     double price; 

     // Constructor 
     public Ticket(double cost) { 
      price = cost; 
     } 

     public double getTicketPrice() { 
      return price; 
     } 

    } 

    public void actionPerformed(ActionEvent e) 
    { 

     a = Integer.parseInt(child.getText()); 
     b = Integer.parseInt(oap.getText()); 
     c = Integer.parseInt(adult.getText()); 

     for(int y = 0; y < 4; y++){ 
      for(int x = 0; x < 4; x++){ 

       lselected = l[x][y].isSelected(); 
       rselected = r[x][y].isSelected(); 

       if (e.getSource() == l[x][y]) { 
        if(lselected == true){ 
         coupon.add(e.getActionCommand()); 
         calcChargeDue(); 
         check(); 
        } 
        else { 
         coupon.remove(e.getActionCommand()); 
         check(); 
        } 
       } 

       if (e.getSource() == r[x][y]) { 
        if(rselected == true){ 
         coupon.add(e.getActionCommand()); 
         calcChargeDue(); 
         check(); 
        } 
        else { 
         coupon.remove(e.getActionCommand()); 
         check(); 
        } 
       } 

       if (e.getSource() == oap){ 
        calcChargeDue(); 
        check(); 
       } 

       if (e.getSource() == adult){ 
        calcChargeDue(); 
        check(); 
       } 

       if (e.getSource() == child){ 
        calcChargeDue(); 
        check(); 
       } 

      } 
     } 

     for(int y = 0; y < 2; y++){ 
      for(int x = 0; x < 4; x++){ 

       mselected = m[x][y].isSelected(); 

       if (e.getSource() == m[x][y]) { 
        if(mselected == true){ 
         coupon.add(e.getActionCommand()); 
         calcChargeDue(); 
         check(); 
        } 
        else { 
         coupon.remove(e.getActionCommand()); 
         check(); 
        } 
       } 
      } 
     } 

     if(time1 == e.getSource()){ 

     } 

     if(time2 == e.getSource()){ 

     } 

     if(time3 == e.getSource()){ 

     } 

     if(time4 == e.getSource()){ 

     } 

     if(time5 == e.getSource()){ 

     } 

     if(submit == e.getSource()) { 

      for(int y = 0; y < 4; y++){ 
       for(int x = 0; x < 4; x++){ 

        lselected = l[x][y].isSelected(); 
        rselected = r[x][y].isSelected(); 

        if (lselected == true) { 
          l[x][y].setEnabled(false); 
        } 

        if (rselected == true) { 
          r[x][y].setEnabled(false); 
        } 

       } 
      } 

      for(int y = 0; y < 2; y++){ 
       for(int x = 0; x < 4; x++){ 

        mselected = m[x][y].isSelected(); 

        if (mselected == true) { 
          m[x][y].setEnabled(false); 
        } 
       } 
      } 

      Collections.sort(coupon); 
      System.out.println("Here's your ticket:"); 
      System.out.println(coupon); 
      System.out.println("Child: " + child.getText()); 
      System.out.println("Adult: " + adult.getText()); 
      System.out.println("OAP: " + oap.getText()); 
      System.out.println("Total Price: " + totalprice.getText()); 
      System.out.println("Thank you. Enjoy your film."); 
      System.out.println(" "); 
      coupon.clear(); 
      child.setText("0"); 
      adult.setText("0"); 
      oap.setText("0"); 
     } 

    } 

    // Main Class 
    public static void main(String[] args) { 
      new cinemaSystem(); //makes new ButtonGrid with 2 parameters 
    } 
} 

相關:Multiple Bookings System

+2

看起來你忘了在你的問題中粘貼你的代碼。 – assylias 2012-04-10 16:10:34

+1

以更好地幫助您更快地使用[SSCCE]編輯您的問題(http://sscce.org/) – mKorbel 2012-04-10 16:12:56

+0

從另一個問題中爲他添加了代碼。也許他不知道如何編輯。 – Alain 2012-04-10 18:56:35

回答

3

的解決方案是使用通過列表或陣列的List<AbstractButton>或數組,然後循環檢查以查看哪些按鈕​​返回true。

儘管如此,爲了獲得更好的幫助,請發佈您的代碼。

+2

+1專注於最高級別的抽象。 – trashgod 2012-04-10 18:27:50

相關問題