2012-06-07 72 views
3

希望有人能够给我意见的一丁点。我对Java非常陌生(1-2周),并且一直在使用教程来实现这一目标,但我尝试的任何操作都不允许我执行一项(简单)任务。点击“发送”从文本字段的setText到textarea的

当我点击按钮,在我的GUI送,我想它设置文本/文本添加到JTextArea中对我的GUI其中我输入的JTextField中。我已经在下面提供了我的代码,所以有人可以指导我去哪里出错。

package firstjavagui; 

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class FirstJavaGui extends JPanel implements ActionListener { 
    private static ActionListener e; 
    protected JTextField tf; 
    protected JTextArea ta; 
    protected JButton send; 
    private final static String newL = "\n"; 

    public FirstJavaGui() { 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public class e implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      String text = tf.getText(); 

      if (send.isSelected()) { 
       ta.setText(text + newL); 
      }  
     } 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Thomas' first application"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(575,300); 

     JMenuBar mb = new JMenuBar(); 

     JMenu m1 = new JMenu("File"); 
     JMenu m2 = new JMenu("Help"); 

     mb.add(m1); 
     mb.add(m2); 

     JMenuItem m21 = new JMenuItem("Save"); 
     JMenuItem m22 = new JMenuItem("Exit"); 

     m1.add(m21); 
     m1.add(m22); 

     JButton send = new JButton("Send"); 

     JButton reset = new JButton("Start/Restart"); 

     JLabel enter = new JLabel("Enter text here:"); 

     JTextField text = new JTextField(25); 

     JPanel p = new JPanel(); 
     p.add(enter); 
     p.add(text); 
     p.add(send); 
     p.add(reset); 

     JTextArea ta = new JTextArea(); 

     frame.getContentPane().add(BorderLayout.SOUTH,p); 
     frame.getContentPane().add(BorderLayout.NORTH, mb); 
     frame.getContentPane().add(BorderLayout.CENTER, ta); 

     send.addActionListener(e); 

     frame.setVisible(true); 
    } 
} 

非常感谢,如果有人能够帮助我一点。

我想这是因为我的所有按钮等不到我的主让我的行为无法识别“发送”的按钮......但如果我写我的GUI的主要方法之外它不编译。我对此很陌生,但我正在学习。只需要一只小手。

回答

1

欢迎的Java。你用代码到达那里,但是有一些小问题。

第一个问题围绕着 “E”。你有两个东西叫做E,一个是一类,一个是引用对象的变量:

// Reference to an object 
private static ActionListener e; 
... 
// Class 
public class e implements ActionListener{ 
... 

现在,你永远不会给你的对象引用值,因此这将是空。在ActionListeners中,响应UI中事件的对象,这不是一个好主意。您需要创建一个实现ActionListener的类的实例以响应事件。以下是一个典型示例:

... 
ExitListener listener = new ExitListener(); 
button.addActionListener(listener) 
... 
private class ExitListener implements ActionListener { 
    @Override 
    public void actionPerformed (ActionEvent e) { 
     System.exit(0); 
    } 
} 

ExitListener是一个ActionListener。为了响应事件,您需要创建一个ExitListener实例并将该实例传递给该按钮。顺便说一句,“e”对于一个班级来说是一个非常糟糕的名字 - 总是让你的班级名称具有描述性。

第二个问题是一个典型的,当他们开始使用Java每个人都有这个问题。这个问题围绕着静态的使用。我不会深入细节,因为它是一个很大的主题,但基本上来自一个声明为静态的方法(例如main(...)),您只能访问在类中声明的标记为静态的变量。对于静态变量,只有一个实际变量。对于非静态变量,每个类的实例都有一个变量。

基本上对于您的测试程序,您可以选择使所有内容都是静态的(包括当前称为“e”的类),或者您可以创建FirstJavaGui的实例,然后使用非静态方法。

+0

谢谢拉斯,真的帮了很多。感谢您详细了解(e不会是我的最终名称,我将快速名称放入测试中,然后在最终编辑时使它们更具描述性)。我已经按照我想要的方式工作了(现在,仍然有很多工作要做)。 –

相关问题