码迷,mamicode.com
首页 > 其他好文 > 详细

模拟打印小票(支持暂停功能)

时间:2018-11-14 22:47:04      阅读:474      评论:0      收藏:0      [点我收藏+]

标签:art   新建   对象   fan   image   efault   准备   cat   开始   

public class MainFrame extends JFrame {

    private JButton printButton = new JButton("打印");
    private JButton suspendButton = new JButton("暂停");

    private JLabel printText = new JLabel("模拟小票打印");
    private JTextArea printTextArea = new JTextArea();

    //判断暂停、继续
    private boolean suspend = false;

    //新建一个对象
    Object lock = new Object();

    public MainFrame() {
        initFrame();
        bindEvent();
    }

    private void initFrame() {
        setTitle("模拟小票打印");
        setSize(800, 500);
        setVisible(true);
        setLayout(null);
        setResizable(false);
        setLocationRelativeTo(null);
        Font labelFont = new Font(Font.SERIF, Font.BOLD, 23);

        printText.setBounds(360, 30, 200, 50);
        printText.setFont(labelFont);

        printTextArea.setBounds(200, 100, 420, 160);
        printTextArea.setFont(labelFont);

        printButton.setBounds(new Rectangle(260, 300, 100, 50));
        printButton.setFont(labelFont);

        suspendButton.setBounds(new Rectangle(460, 300, 100, 50));
        suspendButton.setFont(labelFont);

        add(printButton);
        add(suspendButton);
        add(printText);
        add(printTextArea);
    }

    private void bindEvent() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        printTextArea.setText("准备打印");
        printButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                new Thread(() -> {
                    try {
                        synchronized (lock) {
                            for (int i = 10001; i < 100000; i++) {
                                printTextArea.setText("当前打印单号为:" + i);
                                Thread.sleep(1000);
                                //根据 suspend 来判断 是否让当前线程wait
                                while (suspend) {
                                    int n = i + 1;
                                    printTextArea.setText("打印暂停, 再次打印从" + n + "开始");
                                    lock.wait();
                                }
                            }
                        }
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }).start();
            }
        });

        //暂停/继续 操作
        suspendButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (suspend) {
                    suspend = false;
                    suspendButton.setText("暂停");
                    synchronized (lock) {
                        //唤醒当前线程
                        lock.notifyAll();
                    }
                } else {
                    suspend = true;
                    suspendButton.setText("继续");
                }
            }
        });
    }
}

??exe ??请看??
技术分享图片

技术分享图片

技术分享图片

 

技术分享图片技术分享图片

 

模拟打印小票(支持暂停功能)

标签:art   新建   对象   fan   image   efault   准备   cat   开始   

原文地址:https://www.cnblogs.com/dreammyone/p/9960278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!