如何让用户只选择一个特定的座位?

时间:2017-03-08 10:51:29

标签: java swing

我在这里遇到问题..任何人都可以为这个问题提供合适的解决方案...... 问题是,如何确保用户无法选择座位的混合,例如用户无法选择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 个答案:

答案 0 :(得分:1)

有多种方法可以阻止用户选择无效的席位组合。

  1. 在选择座位时,您可以禁用现在表示无效选择的所有切换按钮(使用setEnabled(false))。这样用户就无法选择无效组合。

  2. 选择无效座位后,您可能会显示错误消息并立即取消选择座位。

  3. 在选择无效席位时,您可以自动取消选择使当前选择无效的席位。

  4. 您可以允许选择无效组合但显示错误消息,并且不允许用户提交/提交组合,直到错误得到解决。