2016-10-30 9 views
1

私はJava swingを使用してGUIを作成しましたが、特定の状況でJButtonが応答しないので、2回クリックする必要があります。クリックすると、textAreaの情報が取得され、TextParserクラスに送られて解析されます。私がそのエリアにもっと多くのものを入力し、evaluateButtonをクリックすると、それは反応せず、再びクリックする必要があります。これが既知のバグか、これをどうやって解決できるか誰にも分かりますか?JButtonが応答しない - 2回クリックする必要があります

クラスのコードは次のとおりです。

/** 
* Add the components to the GUI. 
* @param pane - the pane for the GUI 
*/ 
public static void addComponentsToPane(Container pane) { 
    pane.setLayout(new BorderLayout()); 
    JPanel instructionsPanel = new JPanel(); 
    JLabel instructions = new JLabel("Enter the email text below"); 
    instructionsPanel.setBackground(Color.LIGHT_GRAY); 
    instructionsPanel.add(instructions); 
    pane.add(instructionsPanel, BorderLayout.NORTH); 

    JPanel textAreaPanel = new JPanel(); 
    textAreaPanel.setBackground(Color.LIGHT_GRAY); 
    final JTextArea textArea = new JTextArea(); 
    textArea.setBackground(Color.WHITE); 
    textArea.setMinimumSize(new Dimension(400,350)); 
    textArea.setMaximumSize(new Dimension(400,350)); 
    textArea.setPreferredSize(new Dimension(400,350)); 
    textArea.setLineWrap(true); 
    Border border = BorderFactory.createLineBorder(Color.BLACK); 
    textArea.setBorder(border); 

    textArea.setMinimumSize(new Dimension(500, 200)); 
    textArea.setFont(new Font("Serif", Font.PLAIN, 16)); 
    textAreaPanel.add(textArea); 
    pane.add(textAreaPanel, BorderLayout.CENTER); 

    JPanel scoringPanel = new JPanel(); 
    JButton evaluateButton = new JButton("Evaluate Email"); 
    final JLabel scoreLabel = new JLabel(""); 
    JButton uploadFileBtn = new JButton("Upload File"); 
    JButton importTermsBtn = new JButton("Import Terms"); 
    scoringPanel.add(evaluateButton); 
    scoringPanel.add(uploadFileBtn); 
    scoringPanel.add(importTermsBtn); 
    scoringPanel.add(scoreLabel); 

    pane.add(scoringPanel, BorderLayout.SOUTH); 

    evaluateButton.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      try { 
       String email = textArea.getText(); 
       TextParser textParser = new TextParser(email); 
       double score = textParser.parse(); 
       scoreLabel.setText(score+""); 
      } catch (Exception ex) { 
       System.out.println(ex); 
      } 

     } 
    }); 

    uploadFileBtn.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      scoreLabel.setText("Feature not yet available."); 
     } 
    }); 

    importTermsBtn.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      DatabaseInput d = new DatabaseInput(); 
      d.main(null); 
     } 
    }); 
} 

/** 
* Create the GUI and show it. 
*/ 
private static void createAndShowGUI() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("EmailGUI"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setLocationRelativeTo(null); 
    frame.setPreferredSize(new Dimension(500,500)); 
    frame.setTitle("Email Text Input"); 
    frame.setResizable(true); 
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    frame.setSize(screenSize.width, screenSize.height); 
    //Set up the content pane. 
    addComponentsToPane(frame.getContentPane()); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 

私の主なメソッドは、単にcreateAndShowGUI()を呼び出します。私はStackOverflowの新機能ですので、私のポストに多かれ少なかれ情報を与える必要があるなら、私に教えてください!

+0

あなたの説明からあなたが持っている3つのボタンのうち、あなたは 'evaluateButton'について話していますか?例外が印刷されていますか? –

+2

ボタンの 'ActionListener'を使用してください。あなたは' MouseListener'ではなく、 'ActionListener'を使用している必要がありますので、 – Reimeus

+0

です。 –

答えて

0

ReimeusとJason Cがコメントで述べたように、私は完全に動作するActionListenerを使用していたはずです。

関連する問題