需要帮助java Thread slot machine

时间:2015-10-09 03:38:48

标签: java

我需要制作一个在java和jframe中实现线程的老虎机 这就是iv'e到目前为止所做的事情,请告诉我我需要做什么,以便在我按下播放时每0.5秒改变一次图像,当我按下停止时停止。如果所有三张图像都相同,那就说你赢了。这就是我到目前为止如何将这些数字或文本更改为jlabel中的图像。

public class MySlotNumber extends JFrame{

private MyJLabel x;
private MyJLabel y;
private MyJLabel z;
private JButton btn;

public MySlotNumber(){
    super("ABC");
    setLayout(new FlowLayout());

    Font font = new Font("arial",Font.ITALIC,50);

    x = new MyJLabel();
    x.setFont(font);
    y = new MyJLabel();
    y.setFont(font);
    z = new MyJLabel();
    z.setFont(font);


    btn = new JButton("PLAY");
    btn.setFont(font);

    add(x);
    add(y);
    add(z);
    add(btn);

    final Thread thx = new Thread(x);
    final Thread thy = new Thread(y);
    final Thread thz = new Thread(z);

    btn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("PLAY")){
                if(thx.isAlive()){
                    thx.resume();
                    thy.resume();
                    thz.resume();
                } else {
                    thx.start();
                    thy.start();
                    thz.start();
                }
                btn.setText("STOP");
            } else {
                thx.suspend();
                thy.suspend();
                thz.suspend();
                btn.setText("PLAY");
                System.out.println(x.getText());
            }
        }
    });
}
- - - - - - -- 


public class MyJLabel extends JLabel implements Runnable{
private Random r;
private int ctr;
private final int T = 500;


public MyJLabel(){
    setText("0");
    ctr = 0;
    r= new Random();
}

@Override
public void run() {
    while(true){
        try {
            Thread.sleep(T);
        } catch (InterruptedException ex) {
            Logger.getLogger(MyJLabel.class.getName()).log(Level.SEVERE, null, ex);
        }
        //ctr++;
        ctr = r.nextInt(9)+1;
        setText(String.valueOf(ctr));
    }

}



}

1 个答案:

答案 0 :(得分:0)

这是将图片放在JLabel上并在单击按钮时更改它的一种方法。 (我正在使用窗口构建器进行日食,所以看起来有点奇怪。)不建议您使用绝对路径,因为当您移动项目或文件时,它会中断(我这样做只是为了证明概念)。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Test {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test window = new Test();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Test() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 1379, 643);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel lblNewLabel = new JLabel("");
        lblNewLabel.setIcon(new ImageIcon("C:\\Users\\Andrew\\Pictures\\Random Pictures\\Capture.JPG"));
        frame.getContentPane().add(lblNewLabel, BorderLayout.CENTER);

        JButton btnClickMe = new JButton("click me");
        btnClickMe.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                lblNewLabel.setIcon(new ImageIcon("C:\\Users\\Andrew\\Pictures\\Random Pictures\\I'm pretty sure he did.JPG"));
            }
        });
        frame.getContentPane().add(btnClickMe, BorderLayout.EAST);
    }

}