为什么我的 if/else 语句总是跳到 else
Why is my if/else statement always skipping to the else
我已经尝试用我能想到的所有方式阅读这篇文章,但我终究无法弄清楚为什么 actionlistener 中的 if/else 语句永远不会将 if 语句评估为真。该程序旨在打开具有 3 个面板的 JFrame。其中 2 个有 8 个带有字母的随机按钮。单击按钮时,它应该说它是元音字母还是辅音字母。但是我的程序总是将按钮评估为辅音。我在程序中哪里看不到信息的逻辑流?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
public class JVowelConsenant extends JFrame {
private JPanel contentPane;
ArrayList list = new ArrayList(0);
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
JVowelConsenant frame = new JVowelConsenant();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame.
*/
public JVowelConsenant() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 585, 371);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
JPanel panel = new JPanel();
contentPane.add(panel);
panel.setLayout(new GridLayout(2, 2, 0, 0));
JPanel panel_1 = new JPanel();
contentPane.add(panel_1);
panel_1.setLayout(new GridLayout(2, 2, 0, 0));
JPanel panel_2 = new JPanel();
contentPane.add(panel_2);
panel_2.setLayout(new GridLayout(2, 2, 0, 0));
String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
JButton[] letters = new JButton[26];
for (int i 0; i<8; i++) {
random_Letters();
}
for(int i=0; i<26; ++i) {
letters[i] = new JButton();
letters[i].setText(alphabet[i]);
letters[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource().equals("A")||arg0.getSource().equals("E")|| arg0.getSource().equals("I")||arg0.getSource().equals("O")||arg0.getSource().equals("U")){
JLabel letter_identity = new JLabel("This letter is a Vowel");
panel_2.removeAll();
panel_2.add(letter_identity);
panel_2.revalidate();
}
else{
JLabel letter_identity = new JLabel("This letter is a Consenant");
panel_2.removeAll();
panel_2.add(letter_identity);
panel_2.revalidate();
}
}
});
}
for(int i = 0; i<4;++i){
panel.add(letters[(int) list.get(i)]);
panel_1.add(letters[(int) list.get(i+4)]);
}
}
void random_Letters(){
Random random = new Random();
int random_1 = random.nextInt(26);
int check_point =exclusion(random_1);
while(check_point == 0){
random_1= random.nextInt(26);
check_point = exclusion(random_1);
}
}
int exclusion(int x){
int marker = 0;
if(!list.contains(x)){
list.add(x);
marker = 1;
}
return marker;
}
}
arg0.getSource()
将 return 引用触发事件的对象,在本例中为 JButton
.
相反,您应该可以使用 ActionEvent#getActionCommand
。
String cmd = agr0.getActionCommmand();
//...
如果您使用的是 Java 7+,您可能会发现使用 switch
语句更容易...
switch (cmd) {
case "A":
case "E":
case "I":
case "O":
case "U":
// Vowel
break;
default:
// Consenant
break;
}
有关详细信息,请参阅 How to Write an Action Listeners
很简单,arg0.getSource() returns 事件对象永远不等于 A、E、I、O 或 U,所以控制权交给了 else。
尝试使用
System.out.println(arg0.getSource())
看看有什么吧returns
我已经尝试用我能想到的所有方式阅读这篇文章,但我终究无法弄清楚为什么 actionlistener 中的 if/else 语句永远不会将 if 语句评估为真。该程序旨在打开具有 3 个面板的 JFrame。其中 2 个有 8 个带有字母的随机按钮。单击按钮时,它应该说它是元音字母还是辅音字母。但是我的程序总是将按钮评估为辅音。我在程序中哪里看不到信息的逻辑流?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
public class JVowelConsenant extends JFrame {
private JPanel contentPane;
ArrayList list = new ArrayList(0);
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
JVowelConsenant frame = new JVowelConsenant();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame.
*/
public JVowelConsenant() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 585, 371);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
JPanel panel = new JPanel();
contentPane.add(panel);
panel.setLayout(new GridLayout(2, 2, 0, 0));
JPanel panel_1 = new JPanel();
contentPane.add(panel_1);
panel_1.setLayout(new GridLayout(2, 2, 0, 0));
JPanel panel_2 = new JPanel();
contentPane.add(panel_2);
panel_2.setLayout(new GridLayout(2, 2, 0, 0));
String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
JButton[] letters = new JButton[26];
for (int i 0; i<8; i++) {
random_Letters();
}
for(int i=0; i<26; ++i) {
letters[i] = new JButton();
letters[i].setText(alphabet[i]);
letters[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource().equals("A")||arg0.getSource().equals("E")|| arg0.getSource().equals("I")||arg0.getSource().equals("O")||arg0.getSource().equals("U")){
JLabel letter_identity = new JLabel("This letter is a Vowel");
panel_2.removeAll();
panel_2.add(letter_identity);
panel_2.revalidate();
}
else{
JLabel letter_identity = new JLabel("This letter is a Consenant");
panel_2.removeAll();
panel_2.add(letter_identity);
panel_2.revalidate();
}
}
});
}
for(int i = 0; i<4;++i){
panel.add(letters[(int) list.get(i)]);
panel_1.add(letters[(int) list.get(i+4)]);
}
}
void random_Letters(){
Random random = new Random();
int random_1 = random.nextInt(26);
int check_point =exclusion(random_1);
while(check_point == 0){
random_1= random.nextInt(26);
check_point = exclusion(random_1);
}
}
int exclusion(int x){
int marker = 0;
if(!list.contains(x)){
list.add(x);
marker = 1;
}
return marker;
}
}
arg0.getSource()
将 return 引用触发事件的对象,在本例中为 JButton
.
相反,您应该可以使用 ActionEvent#getActionCommand
。
String cmd = agr0.getActionCommmand();
//...
如果您使用的是 Java 7+,您可能会发现使用 switch
语句更容易...
switch (cmd) {
case "A":
case "E":
case "I":
case "O":
case "U":
// Vowel
break;
default:
// Consenant
break;
}
有关详细信息,请参阅 How to Write an Action Listeners
很简单,arg0.getSource() returns 事件对象永远不等于 A、E、I、O 或 U,所以控制权交给了 else。
尝试使用 System.out.println(arg0.getSource())
看看有什么吧returns