Каков эффективный способ сбора данных в Java? - PullRequest
0 голосов
/ 15 марта 2012

Сценарий: у меня есть графический интерфейс с различными компонентами, в которых пользователь может выбирать параметры. Я хотел бы, чтобы эти параметры были собраны в одном месте, где пользователь может отправить эту информацию мне. Что может быть наиболее разумным местом для хранения информации?

Редакция: GUI уже состоит из частей, содержащих опции, которые есть у пользователя. Например, один JComboBox дает список опций, которые можно выбрать. Затем я получил его для печати как System.out.println(User choice); Все остальные компоненты следуют той же схеме; вся информация печатается через System.out.println(); Теперь, вместо того, чтобы печатать таким образом, я искал разумное место для написания этой информации.

Ответы [ 3 ]

1 голос
/ 15 марта 2012

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

Используйте объект этого класса для хранения того, что пользователь делает, скажем, что он нажимает кнопку, имеет переменную в этом классе, которая является целым числом и представляет, сколько раз была нажата эта кнопка.

Когда данные собраны, просто отправьте данные из класса хранилища туда, куда вам нужно их отправить.

0 голосов
/ 15 марта 2012

Допустим, у вас есть класс модель для представления состояния графического интерфейса:

public class Model
{
    private String name = "";

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}

Вы можете отобразить это в графическом интерфейсе с помощью JPanel, например:

public class GuiPanel extends JPanel
{
    private final Model model;
    private final JTextField nameField;

    public GuiPanel(Model model)
    {
        this.model = model;

        JLabel nameLabel = new JLabel("Name");
        nameField = new JTextField(50);
        nameField.setText(model.getName());
        add(nameLabel);
        add(nameField);
    }

    public void init()
    {
        nameField.addKeyListener(new KeyListener()
        {
            public void keyTyped(KeyEvent e)
            {
                updateModel();
            }

            public void keyPressed(KeyEvent e)
            {
                updateModel();
            }

            public void keyReleased(KeyEvent e)
            {
                updateModel();
            }
        });    
    }

    public void updateModel()
    {
        model.setName(nameField.getText());
    }
}

Обратите внимание, что при изменении графического интерфейса изменения распространяются на объект модели.Состояние модели можно сериализовать, используя что-то вроде XStream:

public class Serializer
{
    public String serialize(Model model)
    {
        XStream xstream = new XStream();
        return xstream.toXML(model);
    }

    public Model deserialize(String xml)
    {
        XStream xstream = new XStream();
        return (Model) xstream.fromXML(xml);
    }
}

Теперь панель можно отобразить на JFrame, например:

public class Main
{
    public static void main(String[] args) throws Exception
    {
        final JFrame frame = new JFrame("Main");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 100);

        final Model model = new Model();
        GuiPanel panel = new GuiPanel(model);
        panel.init();
        final Serializer serializer = new Serializer();
        JButton button = new JButton("Save");

        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String xml = serializer.serialize(model);
                // TODO: write str to disk
                JOptionPane.showMessageDialog(frame, xml);
            }
        });

        frame.add(panel, BorderLayout.CENTER);
        frame.add(button, BorderLayout.SOUTH);

        SwingUtilities.invokeAndWait(new Runnable()
        {
            public void run()
            {
                frame.setVisible(true);
            }
        });

    }           
}
0 голосов
/ 15 марта 2012

вариантов, которые будут собраны в одном месте, где пользователь может отправить эту информацию мне

У вас есть много вариантов, в зависимости от того, что "отправить эту информацию мне"выглядит так:

  1. Вы можете хранить информацию в централизованной реляционной базе данных.Клиенты подключаются к нему и отправляют информацию для сохранения.
  2. Вы можете сериализовать эти данные в файловую систему в некотором формате (например, XML, JSON и т. Д.) И предоставить пользователям механизм для отправки данных слушателю.какой-тоИли же они могут прикрепить текстовый файл к электронному письму и отправить его вам, оставив для вас подробную информацию о загрузке, анализе и хранении.

Вы ничего не говорите о том, как вы планируете получать эти данные,Вы думали об этом?Вам нужно указать оба конца транзакции, чтобы получить осмысленный и действенный ответ.Возможно, вам следует изменить свой вопрос с более подробной информацией.

ОБНОВЛЕНИЕ

Итак, теперь у нас есть некоторые детали:

  1. Приложение запишет файл на диск
  2. Ожидается, что пользователи будут отправлять по электронной почте в OP в качестве вложения.
  3. . OP сохранит вложения, сопоставит их с идентификаторами пользователей и импортирует их в Excel для дальнейшей обработки.

Я бы рекомендовал использовать .csv в качестве формата файла.Это простой текстовый формат, который вы можете легко импортировать в Excel.

SMTP - это протокол связи.Слушателем является сервер электронной почты.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...