2011-09-02 122 views
0

我正在编写一个加密程序,它会将常规字词转换为特定的“代码”。一切都完成了,但程序忽略了提交按钮代码。我应该怎么做才能解决这个问题?按钮逻辑被忽略 - 为什么?

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(); 
    } 
} 

回答

6

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

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

由于源始终是提交按钮,因此代码将始终经历第一个if条件。

您需要重新组织您的逻辑,因为else条件将永远不会执行。

+1

单击“提交”按钮后,如果您尝试重新调整“JFrame”的大小,您会注意到有一个_major_错误。我唯一的猜测是它可能无限循环,特别是因为'print'从不执行。看到我的答案。 – mre

1

我试了一下代码。在第一次测试后,clrtoci总是错误的。然后,我看着textaci.getText(),这显然不是null。我注意到你之前填写了ciphertext,所以有可能该字符串不是null

编辑: 另外for (int i = 0; i >= cleartextl; i++)应该是for (int i = 0; i < cleartextl; i++) 这使得它在我的机器上工作。

`

2

JButton例如动作监听工作就好了。你的循环逻辑有问题。也就是说,你无限循环。

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

这应该如下重构:

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

此外,通过你的代码的质量来看,我建议您阅读以下教程: