Java基本if/else语句状态更改
请看下面我的附加代码,然后在最后看我的问题Java基本if/else语句状态更改,java,swing,if-statement,actionlistener,jlabel,Java,Swing,If Statement,Actionlistener,Jlabel,请看下面我的附加代码,然后在最后看我的问题 class events extends JFrame{ private JLabel label; private JButton button; public events() { setLayout(new FlowLayout()); button = new JButton("Click for text"); add(button); label
class events extends JFrame{
private JLabel label;
private JButton button;
public events() {
setLayout(new FlowLayout());
button = new JButton("Click for text");
add(button);
label = new JLabel("");
add(label);
event e = new event();
button.addActionListener(e);
}
public class event implements ActionListener {
public void actionPerformed(ActionEvent e) {
int x = 0;
if (x == 0) {
label.setText("the new label");
System.out
.println("setting x to 0 and label to display a label");
x = 1;
System.out.println(x);
} else {
label.setText("newerer label");
System.out.println("i reached the else segment");
x = 0;
System.out.println(x);
}
}
}
public static void main(String args[]) {
events gui = new events();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setTitle("Events Test");
gui.setSize(300, 100);
gui.setVisible(true);
}
}
背景:我正在学习java并试图理解一个概念。在这个程序中,我试图创建一个带有按钮的小型gui,当单击该按钮时,将为JLabel分配“新标签”的字符串值。但是,我想使用相同的按钮,如果第二次单击,则将标签更改为“新标签”,如果第三次单击,则再次单击。我尝试使用带有变量x的If/Else语句来实现这一点,以保持基本上为1或0的状态。在If/Else的每个部分末尾,我将x的状态适当地更改为1或0。然而,当试图在eclipse中运行该程序时,我遇到了某种错误。我为If/Else的每一部分分配了一个system.out.println,试图查看程序如何在这两种状态之间切换,但似乎从未到达我的Else语句
问题:
Pano每次调用动作侦听器时,您都在初始化
x
,因此x
始终为0。将x
移动到其他地方,可能将其声明为类成员。每次调用操作侦听器时,您都在初始化x
,因此x
始终为0。将x
移动到其他地方,可能将其声明为类成员。必须将变量“x”声明为类成员
public class event implements ActionListener{
private int x = 0;
public void actionPerformed(ActionEvent e){
if(x == 0){
label.setText("the new label");
System.out.println("setting x to 0 and label to display a label");
x = 1;
System.out.println(x);
}
else {
label.setText("newerer label");
System.out.println("i reached the else segment");
x = 0;
System.out.println(x);
}
}
}
变量“x”必须声明为类成员
public class event implements ActionListener{
private int x = 0;
public void actionPerformed(ActionEvent e){
if(x == 0){
label.setText("the new label");
System.out.println("setting x to 0 and label to display a label");
x = 1;
System.out.println(x);
}
else {
label.setText("newerer label");
System.out.println("i reached the else segment");
x = 0;
System.out.println(x);
}
}
}
如果您只是在寻找状态切换,您实际上可以执行以下操作:
if( label.getText().equals("the new label") ) {
label.setText("newerer label");
} else {
label.setText("the new label");
}
如果您只是在寻找状态切换,您实际上可以执行以下操作:
if( label.getText().equals("the new label") ) {
label.setText("newerer label");
} else {
label.setText("the new label");
}
您可以看到,您总是会命中第一个if(x==0),就像您在将x设置为0之前一样。@MrSimpleMind,+1用于仔细检查!这是大量的代码。您应该编辑代码示例,只包含与您的问题相关的内容。(通常是输入/输出/GUI代码。)@millimoose,显示整个代码不合适吗?根据D先生的回答,另一个观察者可能不知道在我的代码中,在哪里声明x更合适。如果不是这样,那么我道歉,不会再这样做了。这毕竟是我的第一篇帖子。@Warmonger0你解决了吗?你看到你总是会命中第一个if(x==0),就像你刚才把x设为0一样。@simplemin先生,+1,以供仔细检查!这是大量的代码。您应该编辑代码示例,只包含与您的问题相关的内容。(通常是输入/输出/GUI代码。)@millimoose,显示整个代码不合适吗?根据D先生的回答,另一个观察者可能不知道在我的代码中,在哪里声明x更合适。如果不是这样,那么我道歉,不会再这样做了。这毕竟是我的第一篇帖子。@Warmonger0你解决了吗?好的,我理解你的评论,D先生,你说每次调用动作侦听器时我都初始化x。在JButton之后将其声明为私有变量是否合适?实际上,不,如果在另一个类中声明为私有,您将无法访问它好的,我理解您的评论,D先生,您说每次调用action listener时我都初始化x。在JButton之后将其声明为私有变量是否合适?实际上,不,如果在另一个类中将其声明为私有,您将无法访问它。不,不。应用程序状态应该是抽象的,并且与GUI中显示的内容分开。不,不。应用程序状态应该是抽象的,并且与GUI中显示的内容分开。