2016-04-20 15 views
1

Ich fange gerade an, mit JSwing zu arbeiten und zu versuchen, zu lernen, mit Knöpfen und so umzugehen, so werden alle Kritiken geschätzt, und ich entschuldige mich im Voraus für irgendwelche grundlegenden Fehler. Ich versuche nur, einen grundlegenden JFrame mit zwei Knöpfen mit verschiedenen Ergebnissen zu schaffen. Aus irgendeinem Grund kann die Methode actionPerformed den Button "pressme" nicht finden, obwohl ich den Action Listener verwende. Kann mir jemand helfen, die Lösung dafür zu finden? Vielen Dank im Voraus! -NickProblem mit dem Finden von Ereignis mit ActionListener

import java.util.Scanner; 
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 
    class JPanel extends JFrame implements ActionListener 
    { 
     public JPanel createContentPane(){ 
     JPanel pane = new JPanel(); 
     Container con = this.getContentPane(); 
     JPanel titlePanel = new JPanel(); 
      titlePanel.setLayout(null); 
      titlePanel.setLocation(10, 0); 
      titlePanel.setSize(250, 30); 
      pane.add(titlePanel); 
     JLabel answer = new JLabel(""); 
      pane.add(answer); 
     JLabel label1 = new JLabel("Is Ms. Stilman a savage?",   JLabel.CENTER); 
      label1.setSize(150, 15); 
      label1.setLocation(250, 10); 
      titlePanel.add(label1); 
     JButton pressme = new JButton("Nah, what are you talking   about?"); 
      pane.add(pressme); 
      pressme.setMnemonic('P'); 
      pressme.addActionListener(this); 
      pressme.setLocation(250, 10); 
      pressme.requestFocus(); 
     JButton secondpress = new JButton("Yea she's a hardcore savage."); 
      pane.add(secondpress); 
      secondpress.addActionListener(this); 
      secondpress.setLocation(250, 10); 
      secondpress.requestFocus(); 
       } 
       public void actionPerformed(ActionEvent event) { 
      Object source = event.getSource(); 
      if (source == pressme) { 
       answer.setText("Button pressed!"); 
       JOptionPane.showMessageDialog(null, "You're wrong and probably a scrub.", "Message Dialog", 
         JOptionPane.PLAIN_MESSAGE); setVisible(true); 
      } 
      else if (source == secondpress) { 
       answer.setText("Button pressed!"); 
       JOptionPane.showMessageDialog(null, "Oh ya for sure.",   "Message Dialog", 
       JOptionPane.PLAIN_MESSAGE); setVisible(true); 
      } 
     } 
     public static void createAndShowGui(){ 
     JFrame Frame1 = new JFrame("Button Press Test"); 
      setContentPane(demo.createContentPane()); 
      setSize(500, 300); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setVisible(true); 
     } 
    } 
+1

Die Benennung Ihrer Klasse 'JPanel' ist keine gute Idee. – Berger

+0

Haben Sie keinen Kompilierfehler erhalten? Ihre Klasse JPanel steht in Konflikt mit javax.swing.JPanel. JPanel-Bereich = new JPanel(); wird zu einem Fehler führen. – randominstanceOfLivingThing

+0

'pressme' und andere Komponenten sind in' createContent' deklariert, so dass sie von 'actionPerformed' nicht gesehen werden können. Der Umfang dieser Variablen ist auf die 'createContent'-Methode beschränkt. – Berger

Antwort

0

Ihre Tasten sind lokale Variablen, die innerhalb einer Methode, um sie deklariert und instanziiert ändern, um Instanzvariablen ab:

private final JButton pressme; 
private final JButton secondpress; 

createContentPane(){ 
pressme = new JButton("Nah, what are you talking   about?"); 
secondpress =new JButton("Yea she's a hardcore savage."); 
} 
+0

Vielen Dank Ich schätze das Feedback! Sehr hilfreich! – Goldy86

0

Zuerst Ihre Klassennamen ändern. Der Name der vorhandenen Klasse/des Containers (JPanel) darf nicht vorhanden sein. Zweitens, verwenden Sie Klassenvariablen anstelle von lokalen Variablen für Schaltflächen und andere UI-Elemente.

== überprüft, ob die Variable auf denselben Speicher verweist. Das Objekt wird zerstört, nachdem die Methode die Ausführung abgeschlossen hat.

Wenn Sie noch nicht in der Lage sind, den Hörer ausführen, für die Prüfung, die Taste gedrückt wird, statt == Betrieb der Verwendung versuchen, die folgende Art von Code verwendet:

button.setActionCommand("-"); 
    button.addActionListener(this); 
    public void actionPerformed(ActionEvent me){ 

     JButton button =(JButton)me.getSource(); 
     if(button.getActionCommand().equals("-")) 
     //corresponding action to be taken 
     } 
    } 

es das gleiche Problem für mich gelöst vor langer Zeit.