Java 从jButton获取文本值
因此,我需要简单地检查单击按钮的文本是Java 从jButton获取文本值,java,swing,user-interface,jbutton,Java,Swing,User Interface,Jbutton,因此,我需要简单地检查单击按钮的文本是“X”还是“O”(使tic-tac-toe) 此代码不起作用: if (jButton1.getText()=="X") 但是,以下代码不起作用: String jButText = jButton1.getText(); if (jButText=="X") 为什么第一位代码不工作,而第二位代码工作?它是否需要更像if(jButton1.getText().toString==“X”)呢?顺便说一下,我认为Java中不存在toString。这在某种程度
“X”
还是“O”
(使tic-tac-toe)
此代码不起作用:
if (jButton1.getText()=="X")
但是,以下代码不起作用:
String jButText = jButton1.getText();
if (jButText=="X")
为什么第一位代码不工作,而第二位代码工作?它是否需要更像if(
jButton1.getText().toString==“X”
)呢?顺便说一下,我认为Java中不存在toString
。这在某种程度上与我通常用于创建GUI的Visual Basic相当。这种行为在java 1.7.0_45或1.7.0_25中是不可复制的,对于您的java版本来说,这可能是一种奇怪的情况
为了使代码在所有java版本上正常工作,必须使用equals()
=
比较对象,同时.equals()
比较字符串对象的内容
jButton1.getText().equals("X")
这种行为在java 1.7.0_45或1.7.0_25中是不可复制的,对于您的java版本来说,这可能是一种奇怪的情况 为了使代码在所有java版本上正常工作,必须使用
equals()
=
比较对象,同时.equals()
比较字符串对象的内容
jButton1.getText().equals("X")
在java中,当您使用==比较字符串时,您正在比较它们的内存地址,以检查两个字符串是否包含您应该调用的相同文本。equals()
在java中,当您使用==比较字符串时,您正在比较它们的内存地址,以检查两个字符串是否包含您应该调用的相同文本。equals()
使用AWT按钮类时,这也让我抓狂。。。答案是:按钮没有.getText()方法。。。您需要使用.getLabel()
现在,JButtons的故事是:根据您的java版本,getLabel()被弃用,最后被getText取代。。。名称空间不是很棒吗?使用AWT Button类时,这也让我抓狂。。。答案是:按钮没有.getText()方法。。。您需要使用.getLabel()
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyFrame extends JFrame{
JButton equalsButton;
JLabel ansLabel;
JLabel addLabel;
JTextField text1;
JTextField text2;
MyFrame (){
setSize(300,300);
setDefaultCloseOperation(3);
setLayout(new FlowLayout());
text1=new JTextField(10);
add(text1);
addLabel=new JLabel("+");
add(addLabel);
text2=new JTextField(10);
add(text2);
equalsButton=new JButton("=");
equalsButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
int num1=Integer.parseInt(text1.getText());
int num2=Integer.parseInt(text2.getText());
int tot=num1+num2;
ansLabel.setText(Integer.toString(tot));
}
});
add(equalsButton);
ansLabel=new JLabel(" ");
add(ansLabel);
pack();
setVisible(true);
}
}
class Demo{
public static void main(String args[]){
MyFrame f1=new MyFrame();
}
}
现在,JButtons的故事是:根据您的java版本,getLabel()被弃用,最后被getText取代。。。名称空间不是很棒吗?equals(“X”)and not==“X”这不是一个重复的字符串比较问题,每天都会被问几次。这里的问题是为什么第二个代码段有效,而第一个代码段无效。如果第二个片段确实有效,而不是第一个片段,那么我不知道答案。我希望它们生成相同的字节码。toString()确实存在于java中,但是getText()已经返回了一个字符串,因此在它上运行toString()没有多大意义。您使用的是哪一版本的java?这在java 1.7.0_45中是不可复制的。equals(“X”)和not==“X”这不是每天多次被询问的同一个字符串比较问题的重复。这里的问题是为什么第二个代码段有效,而第一个代码段无效。如果第二个片段确实有效,而不是第一个片段,那么我不知道答案。我希望它们生成相同的字节码。toString()确实存在于java中,但是getText()已经返回了一个字符串,因此在它上运行toString()没有多大意义。您使用的是哪一版本的java?这在java 1.7.045中是不可复制的。在最后一种情况下,您不会得到NullPointerException,因为getText()将返回一个空字符串。这并不能回答问题。请看我在问题下的评论。你是rigth@spydon,我错了。)在最后一种情况下,您不会得到NullPointerException,因为getText()将返回一个空字符串。这并不能回答问题。请看我在问题下的评论。你是rigth@spydon,我错了。)实习也是我首先想到的,但这并不能解释为什么第一个条件不起作用。如果“X”是intern,那么无论是否将其分配给变量,getText都会返回“X”。这是因为
jButton1.setText()
显式创建了一个新的字符串对象,用于该比较。我不确定。OP没有说他/她编写了新字符串(jButton1.getText())
,所以这似乎不适用。这当然不能解释为什么OP的两个原始代码片段的行为不同。我诚实的怀疑是OP在理解他/她的结果时犯了一个错误。如果setText
创建了一个新的String
对象,那么这仍然不能解释第二个代码段工作的原因。嗯,你是对的,我检查了AbstractButton的源代码,它不会在setText()上创建一个新的String对象它只做stringoldvalue=this.text;this.text=文本
和getText()只返回文本。实习也是我首先想到的,但它没有解释为什么第一个条件不起作用。如果“X”是intern,那么无论是否将其分配给变量,getText都会返回“X”。这是因为jButton1.setText()
显式创建了一个新的字符串对象,用于该比较。我不确定。OP没有说他/她编写了新字符串(jButton1.getText())
,所以这似乎不适用。这当然不能解释为什么OP的两个原始代码片段的行为不同。我诚实的怀疑是OP在理解他/她的结果时犯了一个错误。如果setText
创建了一个新的String
对象,那么这仍然不能解释第二个代码段工作的原因。嗯,你是对的,我检查了AbstractButton的源代码,它不会在setText()上创建一个新的String对象它只做stringoldvalue=this.text;this.text=文本
和getText()仅返回文本。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyFrame extends JFrame{
JButton equalsButton;
JLabel ansLabel;
JLabel addLabel;
JTextField text1;
JTextField text2;
MyFrame (){
setSize(300,300);
setDefaultCloseOperation(3);
setLayout(new FlowLayout());
text1=new JTextField(10);
add(text1);
addLabel=new JLabel("+");
add(addLabel);
text2=new JTextField(10);
add(text2);
equalsButton=new JButton("=");
equalsButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
int num1=Integer.parseInt(text1.getText());
int num2=Integer.parseInt(text2.getText());
int tot=num1+num2;
ansLabel.setText(Integer.toString(tot));
}
});
add(equalsButton);
ansLabel=new JLabel(" ");
add(ansLabel);
pack();
setVisible(true);
}
}
class Demo{
public static void main(String args[]){
MyFrame f1=new MyFrame();
}
}