2017-03-08 71 views
0

我在這裏有一個問題..任何一個可以給我提供了這個問題的合適的解決方案... 的問題是,如何確保用戶不能選擇座位的例如用戶的混合物不能選擇右3和左3 ..但用戶可以一次選擇多個座位。如何讓用戶只選擇一個特定的座位?

我該如何解決這個問題?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class CinemaTicketMachine { 

    private JComponent ui = null; 
    private JToggleButton[] seats = new JToggleButton[80]; 
    private JTextArea selectedSeats = new JTextArea(3, 40); 

    CinemaTicketMachine() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui!=null) return; 

     ui = new JPanel(new BorderLayout(4,4)); 
     ui.setBorder(new EmptyBorder(4,4,4,4)); 

     selectedSeats.setLineWrap(true); 
     selectedSeats.setWrapStyleWord(true); 
     selectedSeats.setEditable(false); 
     ui.add(new JScrollPane(selectedSeats), BorderLayout.PAGE_END); 

     JPanel cinemaFloor = new JPanel(new BorderLayout(40, 0)); 
     cinemaFloor.setBorder(new TitledBorder("Available Seats")); 
     ui.add(cinemaFloor, BorderLayout.CENTER); 
     JPanel leftStall = new JPanel(new GridLayout(0, 2, 2, 2)); 
     JPanel centerStall = new JPanel(new GridLayout(0, 4, 2, 2)); 
     JPanel rightStall = new JPanel(new GridLayout(0, 2, 2, 2)); 

     cinemaFloor.add(leftStall, BorderLayout.WEST); 
     cinemaFloor.add(centerStall, BorderLayout.CENTER); 
     cinemaFloor.add(rightStall, BorderLayout.EAST); 

     ActionListener seatSelectionListener = new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       showSelectedSeats(); 
      } 
     }; 

     for (int ii=0; ii <seats.length; ii++) { 
      JToggleButton tb = new JToggleButton("S-" + (ii+1)); 
      tb.addActionListener(seatSelectionListener); 
      seats[ii] = tb; 
      int colIndex = ii%8; 
      if (colIndex<2) { 
       leftStall.add(tb); 
      } else if (colIndex<6) { 
       centerStall.add(tb); 
      } else { 
       rightStall.add(tb); 
      } 
     } 
    } 

    private void showSelectedSeats() { 
     StringBuilder sb = new StringBuilder(); 
     for (int ii=0; ii<seats.length; ii++) { 
      JToggleButton tb = seats[ii]; 
      if (tb.isSelected()) { 
       sb.append(tb.getText()); 
       sb.append(", "); 
      } 
     } 
     String s = sb.toString(); 
     if (s.length()>0) { 
      s = s.substring(0, s.length()-2); 
     } 
     selectedSeats.setText(s); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       CinemaTicketMachine o = new CinemaTicketMachine(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 

回答

1

有許多的方法可以防止用戶選擇的座位組合無效。

  1. 在一個座位的選擇,你可以關閉所有的切換按鈕,現在代表無效的選擇(使用setEnabled(false))。這樣用戶就不能選擇無效的組合。

  2. 對無效座位的選擇,你可以顯示錯誤消息,並立即取消選擇座位。

  3. 對無效座位的選擇你可以說是使當前的選擇無效自動取消選擇座位。

  4. 你可以允許選擇無效的組合,但顯示錯誤消息,並且不允許用戶提交/提交的組合,直到錯誤解決。

相關問題