2012-03-14 2 views
0

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

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

+1

Его слишком широка, чтобы ответить на этот вопрос. Будет ли пользователь хранить в конце и отправить его вам в автономном режиме или это онлайн-транзакция, в которой они хранятся, и вы сразу получите это? – raddykrish

+0

Я планировал развернуть это как JAR. Поэтому пользователь будет хранить в конце и отправить его мне. – user1270075

+0

Просто дайте пользователю возможность «экспортировать настройки» (или что-то еще) и выбрать целевой файл вручную? –

ответ

1

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

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

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

0

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

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

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

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

UPDATE

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

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

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

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

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

+0

Дополнительные сведения были добавлены. – user1270075

+0

Нет, это не то, что я имел в виду. Он не добавляет никакой информации. Если у десяти пользователей есть пользовательский интерфейс Swing, и все они распечатывают свои личные параметры, как они получают информацию для вас? Как вы справитесь с этим, как только получите его? – duffymo

+0

Извините. Пользователи могли просто прикрепить файл, содержащий их личную информацию. Как только я получу кучу файлов, я организую его через Excel, чтобы играть с данными. То, как я буду обрабатывать данные, не имеет значения, поскольку меня просто беспокоит программа, генерирующая этот текстовый файл, содержащий информацию. – user1270075

0

у вас есть моделируют класс для представления состояния GUI:

public class Model 
{ 
    private String name = ""; 

    public String getName() 
    { 
     return name; 
    } 

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

Вы можете вынести это на GUI с 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); 
      } 
     }); 

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