Я создаю приложение формы с IntelliJ IDEA. Пока у меня есть пользовательский интерфейс, и все работает так, как я хочу. Кроме того: я хочу сохранить содержимое текстовых полей при выходе и загрузить их при запуске.Сохранить компонент (JTextField, JTextArea) Тексты на windowClosing
Я новичок в материалах форм и не очень приправлен на Java, но я думаю, что я довольно близок к решению. Я не знаю, где мое мышление не так, но первый код:
...
/**
* Created by on 22.02.2016.
*/
public class MainWindow {
public MainWindow() {
...
some listeners
...
}
private void logToInfoArea(String text){
...
}
private void logToResultArea(String text){
...
}
private void saveConfig(){
FileOutputStream out;
try {
out = new FileOutputStream("appConf");
appConf = new Properties();
appConf.setProperty("pathQuery", pathQuery.getText());
appConf.setProperty("pathMapping", pathMapping.getText());
appConf.setProperty("pathOntology", pathOntology.getText());
appConf.setProperty("queryText", queryText.getText());
appConf.store(out, "[update]");
out.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
public void run() throws Exception {
...
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Prototyp");
frame.setContentPane(new MainWindow().mainfield);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
//loading of the config should be here
/* FileInputStream in;
System.out.println("UI loaded.");
defaultConf = new Properties();
try {
in = new FileInputStream("defaultConf");
defaultConf.load(in);
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
Properties appConf = new Properties(defaultConf);
try {
in = new FileInputStream("appConf");
appConf.load(in);
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}*/
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("UI closing.");
saveConfig();
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private static Properties defaultConf;
private static Properties appConf;
private JButton execute;
private JPanel mainfield;
private JTextField pathQuery;
private JTextField pathMapping;
private JTextField pathOntology;
private JRadioButton radQueryText;
private JRadioButton radQueryFile;
private JTextArea consoleLog;
private JTextArea result;
private JTextArea queryText;
}
Как вы можете видеть, что я знаю, что делать, но моя проблема в том, как я могу получить доступ к созданной раме из моих вызванных WindowListener методов «windowOpened» и «windowClosing»? Я знаю, что я в статическом контексте, и все мои компоненты нестатические, но я не знаю, как добраться до экземпляра, вызвавшего Listener. Потому что, если я получу доступ к экземпляру, я думаю, я мог бы поставить sth. как:
saveConfig(instance);
, а затем внутри Метода Saveconfig:
appConf.setProperty("pathMapping", instance.pathMapping.getText());
правильно?
Настоятельно ценю вашу помощь!
Таким образом, единственный способ вернуться к JTextField или окну, вызвавшему событие, - это: e.getWindow(). GetComponents() [someint] .getText(); ? Но как узнать, какие компоненты в списке мне нужны? –
Вам необходимо создать API в своем приложении, которое позволит вам получить доступ к данным. Возможно, вы создаете нечто вроде «ApplicationPanel», которое вы устанавливаете в качестве области содержимого. Затем в «ApplicationPanel» у вас есть метод, подобный 'saveConfiguration()'. Таким образом, этот метод будет иметь доступ ко всем данным в вашем классе и будет знать, как сохранить его в файле. Затем, как только у вас есть ссылка на Окно, вы можете получить панель содержимого окна, а бросок - в вашу «ApplicationPanel». – camickr
Я вижу, что это немного меньше, чем я ожидал, спасибо! –