Java 方法听

Java 方法听,java,swing,methods,actionlistener,Java,Swing,Methods,Actionlistener,我是一个新手,所以这可能是愚蠢的 无论如何,我创建了一个扩展JFrame的类,在一个面板中包含一个JTextField、一个JTextArea和一个JButton 这应该是一个控制台实现,因此当我按下Enter键或旁边的按钮时,TextField会将输入打印到TextArea 我做了这个听众,一切都很好。我现在的问题是如何创建一个希望我在字段上按Enter键的方法?e、 我有一个需要3行输入的方法。第一行调用方法,第二行期望我输入一些东西,第三行期望更多的输入。所有输入完成后,我将一些内容打印到

我是一个新手,所以这可能是愚蠢的

无论如何,我创建了一个扩展JFrame的类,在一个面板中包含一个JTextField、一个JTextArea和一个JButton

这应该是一个控制台实现,因此当我按下Enter键或旁边的按钮时,TextField会将输入打印到TextArea

我做了这个听众,一切都很好。我现在的问题是如何创建一个希望我在字段上按Enter键的方法?e、 我有一个需要3行输入的方法。第一行调用方法,第二行期望我输入一些东西,第三行期望更多的输入。所有输入完成后,我将一些内容打印到文本区域

那么,实际上,该方法必须等待侦听器触发还是什么?有人能解释一下这个东西是如何工作的吗?或者给我一个解决方法

请记住,我需要一些可重用的方法,因为我可能会使用多行输入实现许多方法。提前谢谢

更新:这是我扩展JFrame的类-代码主要是netbean生成的,我将确保早晚处理导入语句。到目前为止,我还没有实现一个方法,因为我不知道如何实现,但希望我先添加一段代码检查输入是否正确(在ConsoleInputCionPerformed中),然后调用该方法(让我们称之为methodX),这将需要两个输入行的其余部分。该类是从my main()中的另一个类调用的

public类主窗口扩展了javax.swing.JFrame{
私有javax.swing.JButton EnterButton;
私有javax.swing.JPanel控制台面板;
私有javax.swing.JScrollPane控制台滚动;
私有javax.swing.JTextArea控制台输出;
私有javax.swing.JTextField控制台输入;
公共主窗口(){
初始化组件();
}
私有组件(){
ConsolePanel=newjavax.swing.JPanel();
ConsoleScroll=newjavax.swing.JScrollPane();
ConsoleOutput=newjavax.swing.JTextArea();
ConsoleInput=newjavax.swing.JTextField();
EnterButton=newjavax.swing.JButton();
setTitle(“图形超级控制台v.1.0”);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setCursor(新java.awt.Cursor(java.awt.Cursor.DEFAULT_Cursor));
setPreferredSize(新的java.awt.Dimension(800600));
控制台输出设置列(20);
控制台输出设置行(5);
ConsoleOutput.setLineWrap(真);
ConsoleOutput.setEditable(假);
setFont(新的java.awt.Font(“Consolas”,1,14));
ConsoleScroll.setViewportView(ConsoleOutput);
ConsoleScroll.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
ConsoleInput.setText(“”);
ConsoleInput.requestFocusInWindow();
setFont(新的java.awt.Font(“Consolas”,1,14));
ConsoleInput.addActionListener(新的java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行的控制台输入(evt);
}
}); 
EnterButton.setText(“>>”);
setFont(新的java.awt.Font(“Consolas”,1,14));
EnterButton.addActionListener(新java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
执行的控制台输入(evt);
}
});
javax.swing.GroupLayout ConsolePanelLayout=新的javax.swing.GroupLayout(ConsolePanel);
ConsolePanel.setLayout(ConsolePanelLayout);
ConsolePanelLayout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(控制台滚动)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addComponent(控制台输入,javax.swing.GroupLayout.DEFAULT\u大小,679,Short.MAX\u值)
.addGap(18,18,18)
.addComponent(输入按钮)))
.addContainerGap())
);
ConsolePanelLayout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(ConsolePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(ConsoleScroll,javax.swing.GroupLayout.DEFAULT\u SIZE,536,Short.MAX\u值)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(输入按钮)
.addComponent(控制台输入,javax.swing.GroupLayout.PREFERRED\u大小,javax.swing.GroupLayout.DEFAULT\u大小,javax.swing.GroupLayout.PREFERRED\u大小))
.addContainerGap())
);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(控制台面板,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(控制台面板,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
);
包装();
setVisible(真);
ConsoleInput.requestFocus();
}
私有void ConsoleInputActionPerformed(java.awt.event.ActionEvent evt){
printf(“>”+ConsoleInput.getText()+“\n”);
ConsoleInput.setText(“”);
}
public javax.swing.JTextArea getConsoleOutput(){
返回控制台输出;
}
public javax.swing.JTextField getConsoleInput(){
返回控制台输入;
}
公共无效打印F(对象…对象){
对于(inti=0;i
public class MainWindow extends javax.swing.JFrame {
private javax.swing.JButton EnterButton;
private javax.swing.JPanel ConsolePanel;
private javax.swing.JScrollPane ConsoleScroll;
private javax.swing.JTextArea ConsoleOutput;
private javax.swing.JTextField ConsoleInput;

public MainWindow() {
    initComponents();
}

private void initComponents() {

    ConsolePanel = new javax.swing.JPanel();
    ConsoleScroll = new javax.swing.JScrollPane();
    ConsoleOutput = new javax.swing.JTextArea();
    ConsoleInput = new javax.swing.JTextField();
    EnterButton = new javax.swing.JButton();

    setTitle("Graphical Super Console v.1.0");
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    setPreferredSize(new java.awt.Dimension(800, 600));

    ConsoleOutput.setColumns(20);
    ConsoleOutput.setRows(5);
    ConsoleOutput.setLineWrap(true);
    ConsoleOutput.setEditable(false);
    ConsoleOutput.setFont(new java.awt.Font("Consolas", 1, 14));

    ConsoleScroll.setViewportView(ConsoleOutput);
    ConsoleScroll.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    ConsoleInput.setText("");
    ConsoleInput.requestFocusInWindow();
    ConsoleInput.setFont(new java.awt.Font("Consolas", 1, 14));
    ConsoleInput.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            ConsoleInputActionPerformed(evt);
        }
    }); 

    EnterButton.setText(">>");
    EnterButton.setFont(new java.awt.Font("Consolas", 1, 14));
    EnterButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            ConsoleInputActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout ConsolePanelLayout = new javax.swing.GroupLayout(ConsolePanel);
    ConsolePanel.setLayout(ConsolePanelLayout);
    ConsolePanelLayout.setHorizontalGroup(
        ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(ConsolePanelLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(ConsoleScroll)
                .addGroup(ConsolePanelLayout.createSequentialGroup()
                    .addComponent(ConsoleInput, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE)
                    .addGap(18, 18, 18)
                    .addComponent(EnterButton)))
            .addContainerGap())
    );
    ConsolePanelLayout.setVerticalGroup(
        ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(ConsolePanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(ConsoleScroll, javax.swing.GroupLayout.DEFAULT_SIZE, 536, Short.MAX_VALUE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(ConsolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(EnterButton)
                .addComponent(ConsoleInput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addContainerGap())
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(ConsolePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(ConsolePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    pack();
    setVisible(true);
    ConsoleInput.requestFocus();
}
private void ConsoleInputActionPerformed(java.awt.event.ActionEvent evt) {
    printf(">"+ConsoleInput.getText()+"\n");
    ConsoleInput.setText("");
}

public javax.swing.JTextArea getConsoleOutput(){
    return ConsoleOutput;
}

public javax.swing.JTextField getConsoleInput(){
    return ConsoleInput;
}

public void printf(Object... obj){
    for(int i=0; i<obj.length; i++){
        ConsoleOutput.append(String.valueOf(obj[i]));
    }
}
public void handleFieldInput(JTextField field) {
    String text = field;
    switch (state) {
        case 0:
            // First line...maybe store the result in a List or array
            state++;
            break;
        case 1:
            // Second line...
            state++;
            break;
        case 2:
            // Third line...
            // Add contents to the text area
            state = 0;
            break;
    }
}
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Frame extends JFrame{
    JTextField t = new JTextField(20);
    JPanel p = new JPanel();

    public Frame(){
        p.add(t);
        t.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                t.setText("Hello world");
            }
        });
        add(p);
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Frame f = new Frame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.pack();
                f.setVisible(true);
            }   
        });
    }
}
List<String> buffer = new ArrayList<String>();

public void actionPerformed(ActionEvent e) {
    buffer.add(getText())
    if (!expectingMoreInput()) {
        processInput(buffer);
        buffer.clear();
    }
}
SynchronousQueue<String> queue = new SynchronousQueue<String>();

public void actionPerfomred(ActionEvent e) {
    queue.add(getLine());
}

public void threeLineMethod() {
    String s1, s2, s3;
    try {
        s1 = queue.take();
        s2 = queue.take();
        s3 = queue.take();
    } catch (InterruptedException ex) {

    }
    // process the three lines
}
//the textfield is wrapped in a class so that it can extends Observable
public class MyTextField extends Observable {

    private JTextField jTextField = new JTextField();

    //this method notifies the observers you will add   
    public void notify(Object o) {
        this.setChanged();
        this.notifyObservers(o);
    }

    public JTextField getJTextField() {
        return jTextField;
    }

}

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

// The main class that observes the swing component you tell it to
public class Controller implements Observer {

    private final JFrame jFrame = new JFrame();

    private final MyTextField myTextField = new MyTextField();

    public Controller() {

        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.pack();
        jFrame.setVisible(true);
        jFrame.add(myTextField.getJTextField());

        //here we add the Observer (Controller) to myTextField (Observable)
        myTextField.addObserver(this);

        //and the keylistener
        myTextField.getJTextField().addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("keyTyped " + e.getKeyCode());
                //now we notify our observers for real
                myTextField.notify(e.getKeyCode());
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("keyReleased " + e.getKeyCode());
                myTextField.notify(e.getKeyCode());
            }

            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("keyPressed " + e.getKeyCode());
                myTextField.notify(e.getKeyCode());
            }
        });
    }

    // this is where the event is received by the Observer 
    // from the observable.
    @Override
    public void update(Observable observable, Object object) {
        System.out.println("Notified by " + observable
                + " with object " + object);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Controller();
            }
        });
    }
}