2016-10-30 5 views
1

Я создал графический интерфейс с использованием java swing, и в конкретной ситуации JButton не отвечает, и я должен дважды щелкнуть его. В клике он получает информацию в текстовой области и отправляет ее в класс TextParser для анализа. Если я напечатаю больше материала в этой области после, и нажмите кнопку «оценка», он не отвечает, и я должен снова щелкнуть его, чтобы работать. Кто-нибудь знает, если это известная ошибка или как я могу это исправить?JButton не реагирует - нужно дважды щелкнуть

Код для класса выглядит следующим образом.

/** 
* 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

Я предполагаю из вашего описания, что из трех кнопок у вас есть, вы говорите о 'оценкеButton'? Вы распечатываете исключение? –

+2

Используйте 'ActionListener' для кнопок – Reimeus

+0

Кстати, вы должны использовать' ActionListener', а не 'MouseListener'. –

ответ

0

Как сказал Реймеус и Джейсон С в комментариях, я должен был использовать ActionListener, который отлично работает.

Смежные вопросы