2016-10-30 5 views
1

Ich habe eine GUI mit Java Swing erstellt und in einer bestimmten Situation reagiert der JButton nicht und ich muss es zweimal klicken. Beim Klicken werden die Informationen in textArea übernommen und an eine TextParser-Klasse gesendet, die analysiert werden soll. Wenn ich nachher mehr Sachen in den Bereich eintippe und auf den evaluateButton klicke, reagiert er nicht und ich muss ihn erneut anklicken, um zu funktionieren. Weiß jemand, ob das ein bekannter Bug ist oder wie ich das beheben kann?JButton reagiert nicht - muss zweimal klicken

Der Code für die Klasse lautet wie folgt.

/** 
* 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); 
} 

Meine Hauptmethode ruft nur createAndShowGUI() auf. Ich bin neu in StackOverflow, also wenn ich mehr oder weniger Informationen in meinem Beitrag geben muss, lass es mich wissen!

+0

Ich nehme von Ihrer Beschreibung an, dass von den drei Tasten, die Sie haben, sprechen Sie über 'evaluateButton'? Erhalten Sie eine Ausnahme ausgedruckt? –

+2

Verwenden Sie einen 'ActionListener' für die Schaltflächen – Reimeus

+0

Btw sollten Sie' ActionListener', nicht 'MouseListener' verwenden. –

Antwort

0

Wie Reimeus und Jason C in den Kommentaren gesagt haben, hätte ich ActionListener verwenden sollen, was perfekt funktioniert.

Verwandte Themen