2017-07-11 7 views
0

Ich versuche, Ausgabe von Benutzer eingegeben Text zu speichern, das ist einfach eine Vorlage dafür, aber ich kann nicht scheinen, einen Weg zum richtigen Zugriff auf die JTextArea, alle Beispiele, die ich ' Habe ich es auf eine andere Weise gemacht, dann versuche ich es zu erreichen, ist es möglich, es so zu machen?Zugriff auf JTextField mit einer privaten Klasse

import javax.swing.*; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.*; 

public class HelloWorldSwing { 
private JFrame mainFrame; 
private JLabel headerLabel; 
private JLabel statusLabel; 
private JPanel controlPanel; 


public HelloWorldSwing(){ 
    prepareGUI(); 
} 
public static void main(String[] args){ 
    HelloWorldSwing swingControlDemo = new HelloWorldSwing(); 
    swingControlDemo.showEventDemo(); 
} 
private void prepareGUI(){ 
    mainFrame = new JFrame("Java Swing Demo"); 
    mainFrame.setSize(400,400); 
    mainFrame.setLayout(new GridLayout(3,1)); 

    headerLabel = new JLabel("",JLabel.CENTER); 
    statusLabel = new JLabel("",JLabel.CENTER); 
    statusLabel.setSize(350,100); 

    mainFrame.addWindowFocusListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent windowEvent){ 
      System.exit(0); 
     } 
    }); 
    controlPanel = new JPanel(); 
    controlPanel.setLayout(new FlowLayout()); 

    mainFrame.add(headerLabel); 
    mainFrame.add(controlPanel); 
    mainFrame.add(statusLabel); 
    mainFrame.setVisible(true); 
} 
private void showEventDemo(){ 
    headerLabel.setText("Control in action: Button"); 


    JButton submitButton = new JButton("Submit"); 
    JTextField userTextField = new JTextField("all",26); 

    submitButton.setActionCommand("Submit"); 

    submitButton.addActionListener(new ButtonClickListener()); 

    controlPanel.add(userTextField); 
    controlPanel.add(submitButton); 

    mainFrame.setVisible(true); 

} 

private class ButtonClickListener implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e){ 
     JTextField textField = (JTextField) e.getSource(); 
     String text = textField.getText(); 
     statusLabel.setText(text); 

    } 
} 

}

Antwort

2

Zuerst bewegen, um den showEventDemo() Code in den Setup-GUI (denn das ist immer noch die GUI Einrichtung).

Sie haben eine Klasse namens ButtonClickListener, die zu einem JButton Objekt hört, empfängt ActionEvents, die von einem JTextField stammen. Dies ist kein sinnvoller Ansatz, da der ActionEvent nur eine Quelle des JButton als Listener enthält.

Stattdessen müssen Sie Ihren Hörer neu schreiben. Sie könnten dafür einen Konstruktor erstellen und die JTextField übergeben.

private class StatusUpdateListener implements ActionListener { 
    private JTextField input; 
    private JLabel status; 

    public SubmitButtonListener(JTextField source, JLabel dest) { 
     input = source; 
     status = dest; 
    } 

    public void actionPerformed(ActionEvent e){ 
     String text = input.getText(); 
     status.setText(text); 
    } 
} 

Dann wäre es einige, wie

wo verwendet werden
submitButton.addActionListener(new StatusUpdateListener(userTextField, statusLabel)); 
+0

Genau das, was ich suchte, danke! – Sentinel

+0

@ user7381012 Ich bin froh zu helfen. Haben Sie keine Angst davor, Ihre ActionListeners als Klassen zu behandeln, die Ihnen helfen, Ihre Probleme zu lösen. Sorgfältige Arbeit, um die wiederverwendbaren zu machen, und Sie können sie als öffentliche Klassen fördern (und sie mehrmals während eines Projekts verwenden). –

Verwandte Themen