按钮逻辑被忽略 - 为什么?

时间:2011-09-02 19:25:11

标签: java swing jbutton

我正在编写一个加密程序,它会接受常规单词并将它们转换为某个“代码”。一切都已完成,但程序忽略了提交按钮代码。我该怎么做才能解决这个问题?

    import javax.swing.*;
    import java.io.*;
    import java.awt.event.*;
    import java.awt.*;
    public class decode extends JFrame {
    private JTextArea textaci;
    private JTextArea textaclr;
    private JLabel lclear;
    private JLabel lcipher;
    private JButton bsubmit;
    private String cleartext;
    private String ciphertext;
    private boolean clrtoci; 


    public decode(){
        super();
        setTitle("Decoder");
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridBagLayout());
        GridBagConstraints c =new GridBagConstraints();
        c.fill=GridBagConstraints.VERTICAL;
        c.weightx=0.5;
        textaci=new JTextArea();
        textaclr=new JTextArea();
        lclear=new JLabel("cleartext:");
        lcipher=new JLabel("ciphertext:");
        bsubmit=new JButton("Submit");
        bsubmit.setActionCommand("enable");
        textaci.setEditable(true);
        textaci.setLineWrap(true);
        textaclr.setEditable(true);
        textaclr.setLineWrap(true);
        textaci.setText(ciphertext);
        c.gridx=0;
        c.gridy=0;
        add(lclear);
        c.gridx=1;
        c.gridy=0;
        add(textaclr);

        c.gridx=0;
        c.gridy=2;
        add(lcipher);
        c.gridx=3;
        c.gridy=4;
        add(textaci);
        add(bsubmit);



    //----------------------------------------------------------------------------\\
        TextFieldHandler hand=new TextFieldHandler();
        bsubmit.addActionListener(hand);
        setVisible(true);
    }
    public class TextFieldHandler implements ActionListener{
        public void actionPerformed(ActionEvent event){
        if(event.getSource()==bsubmit){
            cleartext=textaclr.getText();
            int cleartextl=cleartext.length();
             if(textaci.getText()==null){
            clrtoci=true;
        }
        else{
            clrtoci=false;
        }
             if(clrtoci==true){//if it's cleartext to ciphertext
                 for(int i=0;i>=cleartextl;i++){
                     if(cleartext.contains("a")){
                         ciphertext="3";
                     }
                     if(cleartext.contains("b")){
                         ciphertext="b";
                     }
                     //and so on and on to the rest of the alphabet
                                      }//end of for statement
                 textaci.setText(ciphertext);
                 setVisible(true);
                 System.out.print(ciphertext);
             }//if it's cleartext to ciphertext

        }//bsubmit logic
    }//end of event
        }//end of ActionListener


    public static void main(String[] args){
        new decode();
    }
}

3 个答案:

答案 0 :(得分:6)

"but the program is ignoring the submit button code."

定义“忽略”。该按钮对我来说很好。只需在代码中添加一些System.out.println(...)语句,即可查看代码的哪些部分正在执行。

代码将始终通过第一个if条件,因为源始终是提交按钮。

您需要重新组织逻辑,因为其他条件永远不会被执行。

答案 1 :(得分:2)

JButton实例的动作侦听器工作正常。循环逻辑存在问题。也就是说,你无限循环。

for(int i = 0;i >= cleartextl; i++){
    //do stuff
}

这应该重构如下:

for(int i = 0;i < cleartextl; i++){
    //do stuff
}

另外,根据代码的质量判断,我建议您阅读以下教程:

答案 2 :(得分:1)

我试过了代码。第一次测试后clrtoci总是假的。然后我查看了textaci.getText(),它显然不是null。我注意到你之前用ciphertext填充它,因此该字符串可能不是null

编辑: for (int i = 0; i >= cleartextl; i++)也应为for (int i = 0; i < cleartextl; i++) 这使得它可以在我的机器上响应。

`