Код прослушивателя событий Java не работает должным образом (новичок) - PullRequest
1 голос
/ 02 августа 2011

Итак, я теперь обновил код таким образом: но он все еще не устанавливает строки для ввода.взять пользовательские входы из основного графического интерфейса и использовать их для создания файла.По какой-то причине, когда я запускаю эту программу, код выполняется, но переменные String RETURNROLE, RETURNLIST, RETURNCOMPANY не устанавливаются на то, что вводит пользователь.Кто-нибудь может объяснить, почему?

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.*;
import javax.swing.event.*;

public class Funclass extends JFrame{
FlowLayout layout = new FlowLayout();
String[] Skillz = {"Analytical", "Numerical", "Leadership", "Communication",         "Organisation", "Interpersonal"};
String[] ROLEZ = {"Developer", "Sales", "Marketing", "Consultant"};
String[] Industries = {"Consulting", "Tech"};
public String R1, R2, R3, R4, RETURNROLE, RETURNTYPE, RETURNLIST, RETURNCOMPANY;
JTextField Company = new JTextField("Company Name");
JComboBox TYPE = new JComboBox(Industries);
JList Skills = new JList(Skillz);
JComboBox ROLE = new JComboBox(ROLEZ);
public Funclass(){
    super("Input Interface");
    setLayout(layout);

    Skills.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    add(Company);
    add(TYPE);
    add(ROLE);
    add(Skills);

    Company.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent event){
                    if(event.getSource()==Company);
                    RETURNCOMPANY = event.getActionCommand();
                }
            }

            );


    Skills.addListSelectionListener(
            new ListSelectionListener(){
                public void valueChanged(ListSelectionEvent event){
                    RETURNLIST = (String) Skills.getSelectedValue();

                }
            });


    TYPE.addItemListener(
            new ItemListener(){
                public void itemStateChanged(ItemEvent event){
                    if(event.getStateChange()==ItemEvent.SELECTED)
                        RETURNTYPE = Industries[TYPE.getSelectedIndex()];
                        }
            }
    );


    ROLE.addItemListener(
            new ItemListener(){
            public void itemStateChanged(ItemEvent event){
            if(event.getStateChange()==ItemEvent.SELECTED)
            RETURNROLE = ROLEZ[ROLE.getSelectedIndex()];
            }
            }
            );

    CreateCoverLetter creatorObject = new CreateCoverLetter();
    creatorObject.openFile();
    creatorObject.addBody(RETURNCOMPANY, RETURNROLE, RETURNLIST);
    creatorObject.closeFile();
    System.out.println(RETURNCOMPANY);
}

}   

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Это происходит потому, что вы пишете в файл в конструкторе, сразу после определения слушателей и перед запуском любого события, которое присвоит этим переменным любое значение.

Например, вы можете записать в файл, когда пользователь закроет окно, заставив ваш класс реализовать WindowListener, а затем реализовать событие windowClosed:

public class Funclass extends JFrame implements WindowListener { 

  // ...

  public void windowClosed(WindowEvent e) {
    CreateCoverLetter creatorObject = new CreateCoverLetter();
    creatorObject.openFile();
    creatorObject.addBody(RETURNCOMPANY, RETURNROLE, RETURNLIST);
    creatorObject.closeFile();
    System.out.println(RETURNCOMPANY);
  }
}
2 голосов
/ 02 августа 2011

есть ошибка для Company добавлено ActionListener()

Company.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent event) {
            if (event.getSource() == Company) {
                RETURNCOMPANY = event.getActionCommand();
            }
        }
    });

если вы хотите прослушать некоторые изменения в

JTextField Company = new JTextField("Company Name");

тогда вам нужно реализовать Document Listener , примеры здесь

2 голосов
/ 02 августа 2011

Вы создаете свой выходной файл в Конструкторе вашего класса, поэтому этот файл создается еще до того, как пользователь даже сможет заполнить или выбрать какие-либо значения.

Я бы добавил кнопку «Отправить» или что-то в этом роде, чтобы получить содержимое ваших элементов пользовательского интерфейса и затем создать файл. Вам не понадобятся все различные прослушиватели, которые у вас есть, поскольку вы можете просто прочитать значения во время ActionEvent на кнопке «Отправить».

...