我有一个代码,其中有一个变量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);
}
}
感谢所有帮助。如果我犯了任何错误,请告诉我。
答案 0 :(得分:6)
查看您的if
声明
if(b == nope);
您在每个声明的末尾添加了;
。这意味着无论{...}
语句可能需要什么,if
括号内的两个代码块都将被执行。从每个语句的末尾删除;
Ps-除非你非常特别需要使用原始AWT,否则我考虑看一下Swing,或者你是否真的喜欢冒险,JavaFX,因为它们是更现代的GUI API
答案 1 :(得分:0)
请勿使用弃用的方法,而是使用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();
}
});
答案 2 :(得分:0)
==
COmparison被认为是不错的尝试类似这样的事情并且正如MadProgrammer所说尝试在if和else之后删除;
。
if(b.getLabel().equals("OK!"))
{
v=1;
repaint();
}
if(b.getLabel().equals("Nope"))
{
v=2;
repaint();
}