问题
在Eclipse中创建一个新项目
•创建一个JFrame应用程序,其中包含一个JButton,其标签为“List All Locales”和一个JTextArea。在推送JButton时,将所有可用的语言环境输出到JTextArea。
所以我的代码在它有JButton的地方工作,但我似乎无法在按下按钮时打印出JTextArea中的所有Locales。有什么我想念的吗
我的代码:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
*
*/
/**
* @author Michelle
*
*/
public class Exercise1 extends JFrame implements ActionListener{
JButton button;
JFrame frame;
JTextArea ta;
private static final long serialVersionUID = 1L;
Locale[] available = Calendar.getAvailableLocales();
public Exercise1(){
Container c = getContentPane();
JPanel p = new JPanel();
ta = new JTextArea(20,22);
ta.setText("All Locales will display here");
ta.setEditable(false);
button = new JButton();
button.setText("List all Locales");
JScrollPane output = new JScrollPane(ta);
button.addActionListener(this);
p.add(button, BorderLayout.SOUTH);
p.add(output);
c.add(p);
setSize(300,300);
setVisible(true);
}
public void actionPerformed(ActionEvent a) {
// TO DO Auto-generated method stub
if (a.getActionCommand().equals("List All Locales")){
for(int i=0; i<available.length;i++){
ta.append(available[i].getDisplayName()+"\n");
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Exercise1 myLocaleTest = new Exercise1();
myLocaleTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 0 :(得分:4)
按钮上的文字显示“列出所有区域设置”
button.setText("List all Locales");
在actionPerformed
中,您正在检查操作命令是否为“列出所有语言环境”
if (a.getActionCommand().equals("List All Locales")){
您是否看到"List all Locales"
和"List All Locales"
之间存在差异?
为了避免这种错误,您可以在班级中创建一个常量,然后使用它。例如:
public class Exercise1 extends JFrame implements ActionListener{
private static final String BUTTON_ACTION = "List all Locales";
public Exercise1(){
// ...
button.setText(BUTTON_ACTION);
// ...
}
public void actionPerformed(ActionEvent a) {
if (a.getActionCommand().equals(BUTTON_ACTION)){
// ...
答案 1 :(得分:2)
改为使用equalsIgnoreCase ......
if (a.getActionCommand().equalsIgnoreCase("List all locales")){
答案 2 :(得分:1)
在这里拼错if (a.getActionCommand().equals("List All Locales"))
。按钮有下一个命令"List all Locales"
。改变这一切,一切都会奏效。
答案 3 :(得分:1)
其他人已经指出你的字符串检查中有大写/小写错误。
使用static final
的建议很好,但不适用于按钮标签!为什么?零语言支持!
我在网上进行了快速搜索,找到了方法:setActionCommand(String);
private static final String ACTION_COMMAND = "ac1";
...
JButton jbutton = new JButton();
jbutton.setText("My label text");
jbutton.setActionCommand(ACTION_COMMAND);
...
if ( action.getActionCommand().equals(ACTION_COMMAND) )
static final
应该用于设置动作命令和测试动作,而不是标签!