Java 方法听
我是一个新手,所以这可能是愚蠢的 无论如何,我创建了一个扩展JFrame的类,在一个面板中包含一个JTextField、一个JTextArea和一个JButton 这应该是一个控制台实现,因此当我按下Enter键或旁边的按钮时,TextField会将输入打印到TextArea 我做了这个听众,一切都很好。我现在的问题是如何创建一个希望我在字段上按Enter键的方法?e、 我有一个需要3行输入的方法。第一行调用方法,第二行期望我输入一些东西,第三行期望更多的输入。所有输入完成后,我将一些内容打印到文本区域 那么,实际上,该方法必须等待侦听器触发还是什么?有人能解释一下这个东西是如何工作的吗?或者给我一个解决方法 请记住,我需要一些可重用的方法,因为我可能会使用多行输入实现许多方法。提前谢谢 更新:这是我扩展JFrame的类-代码主要是netbean生成的,我将确保早晚处理导入语句。到目前为止,我还没有实现一个方法,因为我不知道如何实现,但希望我先添加一段代码检查输入是否正确(在ConsoleInputCionPerformed中),然后调用该方法(让我们称之为methodX),这将需要两个输入行的其余部分。该类是从my main()中的另一个类调用的Java 方法听,java,swing,methods,actionlistener,Java,Swing,Methods,Actionlistener,我是一个新手,所以这可能是愚蠢的 无论如何,我创建了一个扩展JFrame的类,在一个面板中包含一个JTextField、一个JTextArea和一个JButton 这应该是一个控制台实现,因此当我按下Enter键或旁边的按钮时,TextField会将输入打印到TextArea 我做了这个听众,一切都很好。我现在的问题是如何创建一个希望我在字段上按Enter键的方法?e、 我有一个需要3行输入的方法。第一行调用方法,第二行期望我输入一些东西,第三行期望更多的输入。所有输入完成后,我将一些内容打印到
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();
}
});
}
}