2016-05-03 18 views
0

Ich versuche, Methoden und Klassen zu lernen Ich erstellte ein kleines Werkzeug, wo Klasse Main es ausführen soll, Klasse SWing, um den Rahmen zu erstellen, Klasse Verb, um eine Schaltfläche zum Hinzufügen zu erstellen Swing und auch um die Aktion durchzuführen, meine Frage hier ist, dass, wie kann ich die durchgeführte Aktion funktioniert wirklich über Verb Class. Lassen Sie uns sagen, ich möchte Text aus Textfeld erhalten und mit textfiled1 verketten und die Antwort auf textfield2 zeigen. hier ist mein CodeHinzufügen von Aktionen zu einer Schaltfläche durch eine andere Klasse

1- meine Hauptklasse

package Abo; 

public class Main { 

    public static void main (String[]args){ 
      Swing runFrame = new Swing(); // creating a variable for class Swing 
      runFrame.Run(); // to run the Swing 
    } 
} 

2- meine Schwingen

package Abo; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JTextField; 

public class Swing extends JFrame { 
    public JTextField textField; 
    public JTextField textField_1; 
    public JTextField textField_2; 

    public Swing() { 
     // creating the frame 
      getContentPane().setLayout(new GridLayout(2,2,5,5)); 

      textField = new JTextField(); 
      getContentPane().add(textField); 
      textField.setColumns(10); 

      textField_1 = new JTextField(); 
      getContentPane().add(textField_1); 
      textField_1.setColumns(10); 

      textField_2 = new JTextField(); 
      getContentPane().add(textField_2); 
      textField_2.setColumns(10); 
      textField_2.setEditable(false); 

      // adding the btn from another class 
      Verb addBTN = new Verb(); 
      getContentPane().add(addBTN.BTN()); 


    } 

    public void Run(){ 
     // setting the frame 
      Swing frame = new Swing(); 
      frame.setVisible(true); 
      frame.setSize(300,400); 
      frame.setLocationRelativeTo(null); 
      frame.setResizable(false); 
      frame.setDefaultCloseOperation(EXIT_ON_CLOSE);  
    } 
} 

3- Verb Klasse

package Abo; 

import javax.swing.JButton; 

public class Verb extends JButton { 


// creating the btn constructor 
    public JButton BTN(){ 
     JButton btn1 = new JButton("First Button"); 
     return btn1; 
    } 
} 

danken Ihnen im Voraus

+0

Wo erweitert Verb JButton? Es scheint sinnlos, von JButton ausgeübt und erstellen Sie eine andere JButton innerhalb. Ich denke, Sie möchten vielleicht auf die Action-Klasse – MadProgrammer

+0

schauen Vielleicht habe ich einen Fehler gemacht, indem ich verwendet extends, ich habe keine Erfahrung damit, nur versucht Ich bevorzuge es auch, den Button selbst zu erstellen, damit ich die Erweiterung entfernen kann. –

+0

Vielleicht sollten Sie beginnen, indem Sie sich [Wie schreibe ich einen Aktion Listener] (https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html), [Wie Sie Schaltflächen, Kontrollkästchen verwenden , und Radio Buttons] (https://docs.oracle.com/javase/tutorial/uiswing/components/button.html) und für etwas etwas fortgeschrittenere [Wie man Aktionen verwendet] (https://docs.oracle. com/javase/tutorial/uiswing/misc/aktion.html) – MadProgrammer

Antwort

0

Wel l in Ihrem Verb Klasse nur fügen Sie diese btn1

btn1.addActionListener(new ActionListener() { 

       public void actionPerformed(ActionEvent e) 
       { 
        //Execute when button is pressed 



       } 
      }); 
+0

ich das schon ausprobiert habe und es hat nicht funktioniert, wird die Schaltfläche tun keine Aktionen Ich habe es in der JButton BTN –

0

Ich bemerkte, dass Verb erweitert JButton, aber Sie entscheiden sich, ein Verfahren zu schreiben, die eine JButton innen von ihm zurückkehrt.

Wenn Sie Verb ein JButton sein, die immer "First Button" genannt wird, dann würde ich stattdessen Verb ‚s Konstruktor ändern.

Eine Möglichkeit, das zu tun, würde so aussehen:

package Abo; 

import javax.swing.JButton; 

public class Verb extends JButton { 
    public Verb() { 
     super("First Button"); //super calls the constructor of the parent of this class, in this case that is JButton 
    } 
} 

Jetzt, da Sie JButton erweitern, wenn Sie einen Verb machen, wird es auch eine JButton mit dem "First Button" Text sein, das Sie

Jetzt kann Ihre ActionListener direkt zu Verb hinzufügen.

Dadurch:

Verb addBTN = new Verb(); 
addBTN.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     textField_2.setText(textField.getText() + textField_1.getText()); 
    } 
}); 

Um jedoch innerhalb der Action Ihrer Textfelder zugreifen zu können, müssen Sie sie endgültig machen.

final textField = new JTextField(); // do this for all text fields

Auch nur als gute Praxis, wenn Sie mehr Funktionen hinzuzufügen als das Standard-Konstruktor Verb planen, würde ich ein JButton statt Ihre eigene Klasse zu machen verwenden Sie einfach.

+0

Vielen Dank Aber dann, wie ich hinzufügen die Taste SWING? PLZ notieren, dass die Klassen nicht in einer Java-Datei sind, jede Klasse ist in einer separaten Java-Datei –

+0

getContentPane(). Add (addBTN); – dustinroepsch

+0

Verb ist jetzt eine Unterklasse von JButton, also alles, was Sie mit einem JButton tun können, können Sie mit einem Verb machen – dustinroepsch