Размещение из JTextFields в массив

#java #swing #arraylist

#java #swing #список массивов

Вопрос:

Хорошо, итак, я создал свой массив и добавил прослушиватель действий, так что при нажатии кнопки с именем «Отправить» все данные из моих JTextFields должны вводиться в ArrayList, хотя этого не происходит, любая помощь о том, почему нет, была бы признательна. ниже приведено выполняемое действие прослушивателя действий.

 public class Main {
    String HouseNumber, StreetName, Town, Postcode, Beds, Price, Type;
    JTextField HouseNumber1, StreetName1, Town1, Postcode1, Beds1, Price1,
            Type1;
    JLabel HouseNumberLabel, StreetNameLabel, TownLabel, PostcodeLabel,
            BedsLabel, PriceLabel, TypeLabel;
    JButton Submit;
    JPanel panel;
    JFrame frame;

    public static void main(String[] args) {
        Main gui = new Main();
        gui.go();
    }

    public void go() {
        frame = new JFrame();
        panel = new JPanel();
        HouseNumberLabel = new JLabel("House Number");
        HouseNumber1 = new JTextField("");
        StreetNameLabel = new JLabel("Street name");
        StreetName1 = new JTextField("");
        TownLabel = new JLabel("Town");
        Town1 = new JTextField("");
        PostcodeLabel = new JLabel("Postcode");
        Postcode1 = new JTextField("");
        BedsLabel = new JLabel("Number of beds");
        Beds1 = new JTextField("");
        PriceLabel = new JLabel("Price (£)");
        Price1 = new JTextField("");
        TypeLabel = new JLabel("Building Type");
        Type1 = new JTextField("");
        Submit = new JButton("Submit");
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        frame.getContentPane().add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);

        // Add contents to JFrame and JPanel
        panel.add(HouseNumberLabel);
        panel.add(HouseNumber1);
        panel.add(StreetNameLabel);
        panel.add(StreetName1);
        panel.add(TownLabel);
        panel.add(Town1);
        panel.add(PostcodeLabel);
        panel.add(Postcode1);
        panel.add(BedsLabel);
        panel.add(Beds1);
        panel.add(PriceLabel);
        panel.add(Price1);
        panel.add(TypeLabel);
        panel.add(Type1);
        panel.add(Submit);
        frame.pack();
        frame.show();

        final ArrayList<Main> p = new ArrayList<Main>();
        Submit.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Main array = new Main();
                HouseNumber = HouseNumber1.getText();
                StreetName = StreetName1.getText();
                Town = Town1.getText();
                Postcode = Postcode1.getText();
                p.add(array);
            }
        });
    }
}
  

Комментарии:

1. Для более быстрой справки отправьте SSCCE .

2. Использование стандартных соглашений об именовании переменных Java. Имена переменных не должны начинаться с символа верхнего регистра.

Ответ №1:

Хотя в вашем основном классе есть поля, поскольку он также управляет графическим интерфейсом, вы не хотите создавать ArrayList<Main>

Если вам просто нужно собрать все строки, то вы можете создать

 ArrayList<String> houseDetails = new ArrayList<String>();

houseDetails.add(HouseNumber);
houseDetails.add(StreenName);
houseDetails.add(Town);
houseDetails.add(Postcode);
  

но более чистой вещью, которую нужно было бы сделать, было бы создать класс для управления этими

 class House
{
    private String houseNumber;
    private String streetName;
    private String town;
    private String postcode;

    public String getHouseNumber() {
        return houseNumber;
    }
    public void setHouseNumber(String houseNumber) {
        this.houseNumber = houseNumber;
    }
    public String getStreetName() {
        return streetName;
    }
    public void setStreetName(String streetName) {
        this.streetName = streetName;
    }
    public String getTown() {
        return town;
    }
    public void setTown(String town) {
        this.town = town;
    }
    public String getPostcode() {
        return postcode;
    }
    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }
}
  

а затем создайте дом и задайте все значения.

 final ArrayList<House> houses = new ArrayList<House>();
  

и в вашем событии actionPerformed

 House house = new House();
house.setHouseNumber(HouseNumber);
...

houses.add(house);
  

Комментарии:

1. Что вы подразумеваете под поселенцами?

2. как ваш Main класс принимает эти строки? должны быть эти set методы или просто поля, такие как array.HouseNumber = HouseNumber;

3. было бы лучше, если бы я мог показать вам весь мой код? я немного смущен, лол

4. да, это помогло бы. но если это слишком много кода (> 150 строк), то почему бы вам не создать вставку из pastie.org и разместите ссылку в своем вопросе

5. я отредактировал основной пост, показывающий весь код из класса, я был бы очень признателен, если бы вы могли направить меня в правильном направлении, чтобы данные были переданы в список массива, заранее спасибо