Почему значение переменной неправильно нажимается при нажатии кнопки в апплете?

У меня есть код, в котором есть переменная v чье значение по умолчанию равно 0. У меня также есть 2 кнопки: ok а также nope, Используя мой код, когда ok нажата, значение v должно быть 1 и когда nope нажимается значение v должно быть 2. Но в обоих случаях это печать значения v как 2. Почему это? Как я могу это исправить?

Изменить: я сделал небольшую ошибку, я исправил ее, благодаря MadProgrammer.

import java.awt.*;
public class chk extends java.applet.Applet
{
    Button ok = new Button("OK!");
    Button nope = new Button("Nope");
    int v = 0;
    public void init()
    {
        setBackground(Color.white);
        add(ok);
        add(nope);
    }

    public boolean action(Event evt , Object arg)
    {
        if(evt.target instanceof Button)
        {
            check((Button)evt.target);
            return true;
        }
        return false;
    }
    public void check(Button b)
    {
        if(b == ok);
        {
            v= 1;
            repaint();
        }
        if(b == nope);
        {
            v=2;
            repaint();
        }
   }
   public void paint(Graphics g)
   {
        g.drawString(""+v,40,40);
   }
   }

Вся помощь приветствуется. Пожалуйста, дайте мне знать, если я сделал какие-либо ошибки.

3 ответа

Решение

Взгляни на свой if заявления

    if(b == nope);

Вы добавили ; в конце каждого утверждения. Это означает, что оба блока кода в пределах {...} брекеты выполняются независимо от того, что if заявления могут хотеть. Удалить ; с конца каждого утверждения

PS. Если у вас нет особой необходимости использовать необработанный AWT, я бы посоветовал взглянуть на Swing или, если вы действительно любите приключения, на JavaFX, так как это более современные API-интерфейсы с графическим интерфейсом.

Не используйте устаревший метод и используйте ActionListener вместо:

ok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                v = 1;
                repaint();
            }
});
nope.addActionListener(new ActionListener() {               
            @Override
            public void actionPerformed(ActionEvent arg0) {
                v = 2;
                repaint();
            }
});

== COmparison не считается хорошим, попробуйте что-то вроде этого, и, как сказал MadProgrammer, попробуйте удалить ; после, если и еще.

if(b.getLabel().equals("OK!"))
     {
       v=1;
       repaint();
      }
if(b.getLabel().equals("Nope"))
      {
        v=2;
        repaint();
      }
Другие вопросы по тегам