按下JButton后为什么没有任何反应

时间:2016-07-10 19:29:48

标签: java swing user-interface netbeans

我有以下代码 - 生成所有Netbeans,但定义按下按钮时应采取的操作的方法除外。当我按下按钮时,首先它没有恢复,Netbeans IDE的标准输出窗口中没有任何内容。出了什么问题?

import javax.swing.JFrame;

public class CodeCenter extends JFrame {

    /**   
    * Creates new  form CodeCenter
    */
    public CodeCenter() {
        initComponents();
    }

   /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("Run");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
            .addContainerGap())
        .addGroup(layout.createSequentialGroup()
            .addGap(288, 288, 288)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
        layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addGap(17, 17, 17)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 548, Short.MAX_VALUE)
            .addContainerGap())
    );

         pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //writes each line of user code to seperate array place
        //userCodeArray can then be passed into an enhanced for loop to act on each line individually
        // May need to be moved into different class
        String[] userCodeArray = getTextasArray();

        System.out.println("Printing");

        if(userCodeArray[0].equals("TEST")) {
            System.out.println("Text read");
        } else {
            System.out.print("Text not read");
        }

    }                                        

    //Sets up Intrigued machine and the codecenter
    public static void main(String args[]) {

        //Not relevant to question
        IntriguedMachine machine = new IntriguedMachine();

        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(CodeCenter.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CodeCenter().setVisible(true);
            }
        });
    }

    //Takes the user code, splits it into a single String for each line, puts each String into userCodeArray, and returns userCodeArray
    //Not automatically-generated
        public String[] getTextasArray() {
            int lineCount = jTextArea1.getLineCount();
            String[] userCodeArray = new String[lineCount];
            for(int i = 0; i<lineCount; lineCount++){

                String [] throwawayArray = jTextArea1.getText().split("//n");
            userCodeArray = throwawayArray;
        }

        return userCodeArray;
    } //End of getTextasArray;

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}

2 个答案:

答案 0 :(得分:2)

好的,没有冒犯,但你的getTextasArray功能完全被击败了。当你按下JButton时没有任何反应的原因是因为for循环由于打字错误而无限,毫无疑问。让我们看一下循环声明,不管吗?

for(int i = 0; i<lineCount; lineCount++){

你能看出什么是错的吗?看一下增量器部分。您不必递增i,而是递增lineCount,我认为您不应该这样做。这意味着i永远不会大于或等于lineCount。正如你亲眼看到的那样,你必须小心那些东西。 :)

但是,让我们摆脱这个循环,并以正确的方式做到这一点。通过使用for循环,我有点看到你想要实现的目标,但是有一种更简单的方法。只需编写这样的函数:

public String[] getTextasArray() {
    return jTextArea1.getText().split("\n");       
}

这将获取文本区域并按换行符拆分。请注意,我使用了字符串\n而不是//n。使用//n会将其除以文字'斜线斜线N`。希望这能让你得到你想要的东西!

答案 1 :(得分:0)

问题在于这一行

String[] userCodeArray = getTextasArray();

具体地

for(int i = 0; i < lineCount; lineCount++) {
        String [] throwawayArray = jTextArea1.getText().split("//n");
        userCodeArray = throwawayArray;
    }

你不是在这里增加我,而是增加lineCount。这会导致处理程序永远不会终止的无限循环。