场景:我有一个包含各种组件的GUI,用户可以在其中选择选项。我希望将这些选项收集到一个地方,然后用户可以将该信息发送给我。什么可能是存储信息的最合理的地方?
EDITED:
GUI已经包含了包含用户选项的部分。例如,一个JComboBox给出了一个可以选择的选项列表。然后我把它打印为System.out.println(User choice);
所有其他组件都遵循相同的模式;所有信息都是通过System.out.println();
打印的。现在我不是以这种方式打印,而是在寻找合理的地方来写这些信息。
答案 0 :(得分:1)
创建一个将用作商店的类。
使用该类的对象来存储用户所做的事情,比如他们点击一个按钮在该类中有一个变量是一个整数,并表示该按钮被点击的次数。
收集数据时,只需将数据从商店类发送到您需要发送到的任何地方。
答案 1 :(得分:0)
选项可以收集到用户可以使用的单个位置 把这些信息发给我
您有很多选择,具体取决于“向我发送信息”的内容:
您没有说明您打算如何获取此数据。你有没有想过这个?您需要指定事务的两端以获得有意义的,可操作的答案。也许您应该更详细地修改您的问题。
更新
现在我们有一些细节:
我建议使用.csv作为文件格式。这是一种简单的文本格式,您可以轻松导入Excel。
SMTP是通信协议。监听器是电子邮件服务器。
用户如何通过电子邮件发送给您?您是否会设置一个电子邮件帐户,除了记录这些消息之外什么都不做?
答案 2 :(得分:0)
假设您有一个模型类来表示GUI状态:
public class Model
{
private String name = "";
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
您可以使用JPanel在GUI上呈现此内容,例如:
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());
}
}
请注意,当GUI更改时,更改将传播到模型对象。可以使用类似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);
}
});
}
}