2012-06-07 4 views
3

Надеюсь, что кто-то может дать мне немного советов. Я действительно новичок в Java (1-2 недели) и использую учебники, чтобы получить это далеко, но ничего, что я пытаюсь, позволяет мне выполнять (простую) задачу.Нажмите «отправить» текст из текстового поля в textarea

Когда я нажимаю кнопку отправки в моем графическом интерфейсе, я хочу, чтобы он установил текст/добавьте текст в JTextArea в моем графическом интерфейсе, который я ввел в 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». У вас есть две вещи, называемые е, один класс и один является переменной со ссылкой на объект:

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

Теперь вы никогда не дайте ссылку на объект, значение так будет нулевым. В случае ActionListeners объекты, которые реагируют на события в пользовательском интерфейсе, это не очень хорошая идея. Вам нужно создать экземпляр класса, который реализует 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. Проблема заключается в использовании статического. Я не буду вдаваться в подробности, поскольку это большой объект, но в основном из метода, объявленного как static (например, main (...)), вы можете обращаться только к переменным, объявленным в классе, которые также помечены как статические. Для статической переменной существует только одна действительная переменная. Для нестатической переменной для каждого экземпляра класса имеется одна переменная.

В основном для вашей тестовой программы вы можете сделать все статическое (включая класс, называемый сейчас «e»), или вы можете создать экземпляр FirstJavaGui, а затем вы можете использовать нестатистику.

+0

Спасибо, Русс, очень помог. Благодарим вас за то, что вы подробно остановились на этом (я не буду моим окончательным именем для этого, я ставлю быстрые имена для тестирования, а затем сделаю их более подробными для окончательного редактирования). У меня это работает так, как я хочу (на данный момент у него есть нагрузки, чтобы сделать это). –

Смежные вопросы