1 Востаннє редагувалося fed_lviv (11.09.2013 18:23:40)

Тема: Програмка довідник за допомогою Swing

Всім привіт! В Джаві новачок тому прошу допомоги! Хочу написати програму схожу на телефонний довідник. Коли писав без Swinga (тільки консоль) все чудово працювало. Вирішив написати туж програмку тільки з використанням SWING і ось "застряг". Не знаю, як правильно прописати метод пошуку і де саме прописати метод (в якому класі). Програма складається з трьох класів (People - "головний" клас, PeopleFrame- "фрейм-оболочка", Start- з цього класу запускається програма). Програму максимально "врізав", щоб менше кода було. Допоможіть будь-ласка!

package first;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class People {
    private String surname;
    private long telephoneNumber;

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public long getTelephoneNumber() {
        return telephoneNumber;
    }

    public void setTelephoneNumber(long telephoneNumber) {
        this.telephoneNumber = telephoneNumber;
    }

    static ArrayList<People> peopleList = new ArrayList<>();

    public void readPeople(Scanner myFile) {
        surname = myFile.next();
        telephoneNumber = myFile.nextLong();
    }

    public static void downloadList() throws FileNotFoundException {
        Scanner myFile = new Scanner(new File("Base.txt"));
        while (myFile.hasNext()) {
            People people = new People();
            people.readPeople(myFile);
            peopleList.add(people);
        }
    }
}
package first;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class PeopleFrame extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    JTextField nameSearch = new JTextField(10);
    JButton button = new JButton("Пошук");
    JTextField name = new JTextField(10);
    JTextField number = new JTextField(10);

    public PeopleFrame() {
        add(nameSearch);
        add(button);
        button.addActionListener(this);
        add(name);
        add(number);
        setTitle("Довідник");
        setLocation(500, 200);
        setLayout(new GridLayout(2, 2));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {

    }
}
package first;

import java.io.FileNotFoundException;

public class Start {
    public static void main(String[] arg) throws FileNotFoundException {
        People.downloadList();
        new PeopleFrame();
    }
}

2

Re: Програмка довідник за допомогою Swing

Код в студію

3 Востаннє редагувалося fed_lviv (11.09.2013 20:15:02)

Re: Програмка довідник за допомогою Swing

Метод-пошук ось такий:

public void search(ArrayList<People> peopleList){
        for (People x:peopleList){
            if(nameSearch.getText().equals(x.getSurname())){
                name.setText(x.getSurname());
                number.setText(String.valueOf(x.getTelephoneNumber()));
            }
            
        }
    }

Як даний метод "всунути" в метод actionPerformed, щоб при натисканні кнопки виконувався пошук?!

4

Re: Програмка довідник за допомогою Swing

А що Вам заважає просто його визвати січ з екшнПервомед?

public void actionPerformed(ActionEvent e) 
{
    if (e = ButtonDown){ // (чи як той евент називається, що при натисканні кнопки)
        ArrayList pl = ...//something
        search(pl);
    }
}

5

Re: Програмка довідник за допомогою Swing

А що заважає створити клас, наприклад, PhoneBook і в ньому описати цей метод? В цьому класі можуть бути і інші корисні методи пов'язані з пошуком. Думайте в ООП-стилі, це ж Java :)

6

Re: Програмка довідник за допомогою Swing

Зробив так:
В класі People прописав метод пошуку:

public static void search(JTextField nameSearch, JTextField name,
            JTextField number) {
        for (People x : peopleList) {
            if (nameSearch.getText().equalsIgnoreCase(x.getSurname())) {
                name.setText(x.getSurname());
                number.setText(String.valueOf(x.getTelephoneNumber()));
            }
        }
    }

В класі PeopleFrame в методі actionPerformed викликав метод пошуку:

public void actionPerformed(ActionEvent e) {
        People.search(nameSearch, name, number);
        }

Лякає інше, як в мене розширеться клас People і метод пошуку, коли я в цей довідник подобавляю не тільки прізвища і телефони.

7

Re: Програмка довідник за допомогою Swing

Chemist-i написав:

А що Вам заважає просто його визвати січ з екшнПервомед?

Пробував, компілятор видає помилку:

public void actionPerformed(ActionEvent e) {
        ArrayList asd=People.peopleList;
        for (People x : asd) {
            if (nameSearch.getText().equalsIgnoreCase(x.getSurname())) {
                name.setText(x.getSurname());
                number.setText(String.valueOf(x.getTelephoneNumber()));
            }

Помилка for (People x : asd)  підкреслено-"asd" - Type mismatch: cannot convert from element type Object to People
Підкажіть будь-ласка, що роблю не правильно?!