2016-04-06 5 views
0

Эй, у меня есть небольшая проблема с моей игрой в кости. Проблема в том, что i нажимаю кнопку для нового номера Dice, моя панель не перекрашивает. Я использую шаблон Observer для обновления моей панели. Мой наблюдатель отлично работает, когда я хочу обновить метку, но это не сработало, когда я хочу обновить Graphics.filloval. Кто-то знает, почему мой paintcomponent не перекрашивать ??!,Java-перекраска с Observer не сработала

Благодаря

Dice класса

public class Dice { 

    private int value = 0; 
    private java.util.List<DobbelObserver> observers; 

    public Dice() 
    { 
    value = 0; 
    observers = new ArrayList<>(); 
    } 

    public int getValue() 
    { 
    return value; 
    } 

    public void ThrowDice() 
    { 
    value = new Random().nextInt(6) + 1; 
    System.out.println(value); 
    notifyObservers(); 
    } 

    public void addObserver(DobbelObserver observer) 
    { 
    observers.add(observer); 
    } 

    public void notifyObservers() 
    { 
    for(DobbelObserver observer : observers) 
    { 
     observer.update(); 
    } 
    } 
} 

Каркасные

public class DobbelFrame extends JFrame { 

    public DobbelFrame() 
    { 
    Dice dice = new Dice(); 

    setTitle("Dobbelstenen"); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setVisible(true); 
    setFocusable(true); 
    setContentPane(new DobbelPanel(dice)); 
    pack(); 
    } 
} 

наблюдатель

public interface DobbelObserver { 

    void update(); 
} 

панели

public class DobbelPanel extends JPanel implements DobbelObserver{ 

    private JButton btn1; 
    private Dice wdice; 

    public DobbelPanel(Dice dice) 
    { 
    this.wdice = dice; 
    setPreferredSize(new Dimension(400,400)); 

    addComponents(); 

    addActionListeners(); 
    dice.addObserver(this); 
    } 

    private void addComponents() 
    { 
    btn1 = new JButton("Genereer"); 
    add(btn1); 
    } 

    public void addActionListeners() 
    { 
    btn1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent actionEvent) { 
      wdice.ThrowDice(); 
     } 
    }); 
    } 

    public void paintComponent(Graphics g) 
    { 
    if(wdice.getValue() == 0) { 
     g.drawRect(0,0,100,100); 

    } else if (wdice.getValue() == 1) { 
     g.fillOval(40, 40, 15, 15); 

    } else if (wdice.getValue() == 2) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
    } else if (wdice.getValue() == 3) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(40, 40, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
    } else if (wdice.getValue() == 4) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
    } else if (wdice.getValue() == 5) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
     g.fillOval(40, 40, 15, 15); 

    } else if (wdice.getValue() == 6) { 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
     g.fillOval(10, 40, 15, 15); 
     g.fillOval(75, 40, 15, 15); 

    } 

    } 

    @Override 
    public void update() 
    { 
    repaint(); 
    } 
} 
+0

ли вы пытаетесь отлаживать и добавить точку останова в коде. Если да, изменились ли вы все правильные значения. Из кода, который вы предоставили, я бы предположил, что это может быть две вещи. Возможно, у вас нет правильной ссылки, чтобы перерисовать. Или, может быть, перерисовка даже не срабатывает. –

+0

Я думаю, что проблема с перекрашивать, а не с уведомлением-шаблон –

+0

о есть решить проблему с этим общественной ничтожной paintComponent (Graphics г) { super.paintComponent (г); } – user2978798

ответ

0
public void paintComponent(Graphics g) { 

    //This solved the problem 
    super.paintComponent(g); 



    g.setColor(Color.magenta); 
    if (wdice.getValue() == 0) { 
     g.drawRect(0, 0, 100, 100); 


    } else if (wdice.getValue() == 1) { 
     g.fillOval(40, 40, 15, 15); 

    } else if (wdice.getValue() == 2) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
    } else if (wdice.getValue() == 3) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(40, 40, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
    } else if (wdice.getValue() == 4) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
    } else if (wdice.getValue() == 5) { 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
     g.fillOval(40, 40, 15, 15); 

    } else if (wdice.getValue() == 6) { 
     g.fillOval(10, 10, 15, 15); 
     g.fillOval(10, 75, 15, 15); 
     g.fillOval(75, 10, 15, 15); 
     g.fillOval(75, 75, 15, 15); 
     g.fillOval(10, 40, 15, 15); 
     g.fillOval(75, 40, 15, 15); 

    } 
Смежные вопросы