2014-03-25 29 views
1

我想使Java桌面應用程序,我想使自動圖像洗牌我能夠做到這一點,但問題是,它不洗牌所有圖像,我給我想洗牌所有圖像 我怎麼能達到這個如何順序排列圖像?

下面是一些代碼,我發現here

/** 
* @see https://stackoverflow.com/a/22423511/230513 
* @see https://stackoverflow.com/a/12228640/230513 
*/ 
public class ImageShuffle extends JPanel { 

    private List<Icon> list = new ArrayList<Icon>(); 

    private JLabel label = new JLabel(); 
    private Timer timer = new Timer(1000, new ActionListener() { 

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

    public ImageShuffle() { 
     this.setLayout(new GridLayout(1, 0)); 

     list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\e.jpg")); 
    list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\d.jpg")); 
    list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.png")); 
     list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\f.jpg")); 
     // list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.jpg")); 
     //label.setIcon(UIManager.getIcon("OptionPane.informationIcon")); 

     timer.start(); 
    } 

    private void update() { 

    Random r=new Random(); 
    int i1=(r.nextInt(3) +1); 

    label.setIcon(list.get(i1)); 
} 

private void display() { 
    JFrame f = new JFrame("ImageShuffle"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(this); 
    f.add(label); 
    f.pack(); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
} 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ImageShuffle().display(); 
      } 
     }); 
    } 
} 

在此先感謝

+0

http://stackoverflow.com/questions/1519736/random-shuffling-of-an-array – Reddy

+0

你可以使用['Collections.shuffle' ](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html)並獲取列表中的第一個元素... – MadProgrammer

+0

我該如何使用這個可以解釋一點點 – user3456343

回答

2

開始通過創建一個洗牌列表...

private List<Icon> list = new ArrayList<Icon>(); 
private List<Icon> shuffled; 

//... 

list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\e.jpg")); 
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\d.jpg")); 
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\yellow.png")); 
list.add(new ImageIcon("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\f.jpg")); 

shuffled = new ArrayList<Icon>(); 
update(); 

每次你計時器滴答聲,並呼籲actionPerformed,直到沒有剩下彈出shuffled列表的第一個元素...

if (shuffled.isEmpty()) { 
    shuffled.addAll(list); 
    // Prevent the current image from been selected next... 
    shuffled.remove(label.getIcon()); 
    Collections.shuffle(shuffled); 
} 

Icon icon = shuffled.remove(0); 
label.setIcon(icon); 

這將刪除圖像的可能性被允許顯示多次連續。您的隨機值計算應該是更像int i1 = (r.nextInt(list.size()));反正...

注:

ImageShuffle並不需要從JPanel擴展,你不添加任何東西給它。這意味着你可以擺脫this.setLayout(new GridLayout(1, 0));f.add(this);和程序仍應運行