Почему значение переменной неправильно нажимается при нажатии кнопки в апплете?
У меня есть код, в котором есть переменная 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();
}