2016-11-06 149 views
0

如何在单击按钮时使随机图像出现?Java中的随机图像

public class ButtonListener implements ActionListener { 

    private Model mod; 
    public ButtonListener(Model _m){ 
     mod = _m; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     int x = mod.random(); 
     if (x == 1) { 
      JLabel L1 = new JLabel(); 
      JLabel L2 = new JLabel(); 
      JLabel L3 = new JLabel(); 
      L1.setIcon(new ImageIcon ("Images/Green.png")); 
      System.out.println("1"); 
     } 
     else if (x == 2) { 
      JLabel L1 = new JLabel(); 
      L1.setIcon(new ImageIcon("Images/Purple.png")); 
      System.out.println("2"); 
     } 
     else { 
      JLabel L1 = new JLabel(); 
      L1.setIcon(new ImageIcon("Images/Red.png")); 
      System.out.println("3"); 
     } 
    } 
} 

View

public class View { 

    public View() { 
     Model _m = new Model(); 
     JFrame f = new JFrame("...."); 
     JPanel p = new JPanel(new GridLayout(2, 3)); 
     JLabel L1 = new JLabel(); 
     JLabel D = new JLabel(); 
     JLabel L2 = new JLabel(); 
     JLabel L3 = new JLabel(); 
     JButton B = new JButton("Spin"); 

     p.add(L2); 
     p.add(L3); 
     p.add(L1); 
     p.add(D); 
     p.add(B); 
     B.addActionListener(new ButtonListener(_m)); 
     f.add(p); 
     f.pack(); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

Model

什么我需要添加到浏览所以当我按一下按钮

ButtonListener图像将真正改变

public class Model { 

    public Model(){ 
    } 

    public int random(){ 
    Random rand = new Random(); 
     return rand.nextInt(4); 
    } 
} 

回答

1

您的代码似乎试图创建一个MVC像程序,如果是这样,那么你的模型需要

  1. 状态(即一个或多个字段)
  2. 接受并通知更改听众的能力,这样,当其中一个“绑定”字段发生变化,可以直接通知视图(例如,视图本身具有向模型注册的监听器)或间接通知视图(例如,控制器已将监听器注册到模型中,然后通知它 - 控制器 - 改变视图)。

当我这样做了,我已经给了我的模型一个SwingPropertyChangeSupport字段以及允许其他类添加和删除PropertyChangeListeners到这个支持对象的方法。然后,我的绑定字段(这里是一个表示随机int的字段)有一个setter方法,并且在此方法中,我通过调用其中一个方法通知我所有侦听器支持对象。

例如,请查看我对这里的一个类似问题的回答:Using a JFileChooser with Swing GUI classes and listeners

+0

我想明白了谢谢 – Nestlewater