2017-06-24 9 views
0

Ich versuche, meine JButton ActionListener in einer anderen Klasse als meine GUI auszuführen. So bekomme ich die Schaltfläche funktioniert, aber ich kann nicht auf die TextFields zugreifen, sie sind nur "leer", wenn ich auf sie zugreifen möchte.Führen Sie JButton ActionListener in verschiedenen Klassen

Also das ist meine GUI-Klasse:

public class CaeserGUI extends JFrame { 

    JPanel contentPane; 
    private JTextField txt_input; 
    private JTextField number_input; 
    private JButton btn_translate; 
    private JTextArea txt_output; 
    private JTextField txt_input2; 
    private JTextField number_input2; 
    private JTextArea txt_output2; 

    /** 
    * Launch the application. 
    * Author: Paul Viehmann 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        CaeserGUI frame = new CaeserGUI(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public CaeserGUI() { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     txt_input = new JTextField(); 
     txt_input.setBounds(10, 38, 363, 20); 
     contentPane.add(txt_input); 
     txt_input.setColumns(10); 

     number_input = new JTextField(); 
     number_input.setBounds(383, 38, 41, 20); 
     contentPane.add(number_input); 
     number_input.setColumns(10); 

     JTextPane txtpnZubersetzenderSatz = new JTextPane(); 
     txtpnZubersetzenderSatz.setText("Zu \u00FCbersetzender Satz:"); 
     txtpnZubersetzenderSatz.setBounds(10, 11, 126, 20); 
     contentPane.add(txtpnZubersetzenderSatz); 

     JTextPane txtpnVerschiebung = new JTextPane(); 
     txtpnVerschiebung.setText("Verschiebung:"); 
     txtpnVerschiebung.setBounds(349, 11, 75, 20); 
     contentPane.add(txtpnVerschiebung); 

     txt_output = new JTextArea(); 
     txt_output.setBounds(10, 69, 414, 40); 
     contentPane.add(txt_output); 

     JTextPane txtpnZuDechiffrierenderSatz = new JTextPane(); 
     txtpnZuDechiffrierenderSatz.setText("Zu dechiffrierender Satz:"); 
     txtpnZuDechiffrierenderSatz.setBounds(10, 120, 126, 20); 
     contentPane.add(txtpnZuDechiffrierenderSatz); 

     txt_input2 = new JTextField(); 
     txt_input2.setColumns(10); 
     txt_input2.setBounds(10, 147, 363, 20); 
     contentPane.add(txt_input2); 

     number_input2 = new JTextField(); 
     number_input2.setColumns(10); 
     number_input2.setBounds(383, 147, 41, 20); 
     contentPane.add(number_input2); 

     JTextPane textPane_1 = new JTextPane(); 
     textPane_1.setText("Verschiebung:"); 
     textPane_1.setBounds(349, 120, 75, 20); 
     contentPane.add(textPane_1); 

     txt_output2 = new JTextArea(); 
     txt_output2.setBounds(10, 176, 414, 40); 
     contentPane.add(txt_output2); 

     ActionListener actionListener = new ButtonListener(number_input, number_input2, btn_translate, txt_output, txt_input, txt_input2, txt_output2); 

     btn_translate = new JButton("\u00DCbersetzen"); 
     btn_translate.addActionListener(actionListener); 
     btn_translate.setBounds(10, 227, 414, 23); 
     contentPane.add(btn_translate); 
    } 
} 

Und das ist mein Zuhörer Klasse:

public class ButtonListener implements ActionListener{ 

    private JTextField txt_input; 
    private JTextField number_input; 
    private JButton btn_translate; 
    private JTextArea txt_output; 
    private JTextField txt_input2; 
    private JTextField number_input2; 
    private JTextArea txt_output2; 

    public ButtonListener(JTextField txt_input, JTextField number_input, 
          JButton btn_translate, JTextArea txt_output, 
          JTextField txt_input2, JTextField number_input2, 
          JTextArea txt_output2){ 

     this.txt_input = txt_input; 
     this.number_input = number_input; 
     this.btn_translate = btn_translate; 
     this.txt_output = txt_output; 
     this.txt_input2 = txt_input2; 
     this.number_input2 = number_input2; 
     this.txt_output2 = txt_output2; 
    } 

    public void actionPerformed(ActionEvent e){ 
     if(txt_input.getText().equals("")){ 
      System.exit(0); 
     }else{ 
     } 
    } 
} 

Wenn ich die Taste drücken, auch mein Programm beendet werden, wenn ich etwas in dem Textfeld schreiben.

Ich habe viele andere Beiträge gelesen, konnte aber nicht funktionieren.

Ich schätze jede Antwort.

Antwort

1

Sie scheinen die Parameter in der falschen Reihenfolge zu vorbei (soweit ich, basierend auf Ihren Namenskonventionen sagen kann)

+---------------------------+--------------------------+ 
| ActionListener Parameters | The Order You're Passing | 
+---------------------------+--------------------------+ 
| txt_input     | number_input    | 
| number_input    | number_input2   | 
| btn_translate    | btn_translate   | 
| txt_output    | txt_output    | 
| txt_input2    | txt_input    | 
| number_input2    | txt_input2    | 
| txt_output2    | txt_output2    | 
+---------------------------+--------------------------+ 

Das bedeutet, wenn Sie den Wert von txt_input in Ihrem ActionListener inspizieren, Sie suchen tatsächlich die number_input Wert ... dies erlauben Schreie Fragen zu mir

Meine "allgemeine" Empfehlung wäre, eine interface, die Getter und Setter bieten, mit besseren Namen als "Text" und "Text2" , damit Sie ihre Bedeutung besser unterscheiden können. Ich hätte CaeserGUI diese implementieren interface und es dann passieren, um die ActionListener, die auf eine Instanz einer einzigen Referenz nahm von interface sagte

Vermeiden Sie null Layouts, pixelgenaue Layouts sind eine Illusion innerhalb der modernen UI-Design. Es gibt zu viele Faktoren, die die individuelle Größe von Komponenten beeinflussen, von denen Sie keine kontrollieren können. Swing wurde entwickelt, um mit Layout-Managern im Kern zu arbeiten, das Verwerfen dieser führt zu einem Ende der Probleme und Probleme, die Sie mehr und mehr Zeit verbringen werden, um zu beheben

Wenn Sie denken, ich bin über reaktiv, das ist was passiert, wenn ich den Code auf meinem PC laufen

Bad Layout

sehen Sie, wie die „Caret“ im zweiten Feld gebrochen ist?

Ich würde empfehlen, JLabel s zu verwenden, um Aufforderungen zu den Feldern bereitzustellen, anstatt ihren Text zu setzen, weil das nur verwirrend ist. Siehe How to Use Labels für weitere Details

Komponenten wie JTextPane wirklich davon profitieren, in einem JScrollPane eingewickelt worden ist, dies ermöglicht es dem Benutzer, den Text zu sehen, wenn sie über die visuellen Grenzen der Komponente erweitert. Siehe How to Use Scroll Panes für weitere Details

+0

ty, yeah Ich habe sie falsch übergeben ... D: Aber ich werde auch versuchen, die Schnittstelle: D – itsPauV

+0

Es wird nicht das letzte Mal Sie Parameter verwechseln: P – MadProgrammer

+0

Vielen Dank, diese Etiketten viel besser arbeiten: D – itsPauV

Verwandte Themen