2016-02-23 5 views
0

Я создаю приложение формы с 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()); 

правильно?

Настоятельно ценю вашу помощь!

ответ

1

как я получить доступ к созданному кадр из моего WindowListener

Из WindowEvent. Вы можете использовать либо методы getWindow(), либо getSource().

+0

Таким образом, единственный способ вернуться к JTextField или окну, вызвавшему событие, - это: e.getWindow(). GetComponents() [someint] .getText(); ? Но как узнать, какие компоненты в списке мне нужны? –

+0

Вам необходимо создать API в своем приложении, которое позволит вам получить доступ к данным. Возможно, вы создаете нечто вроде «ApplicationPanel», которое вы устанавливаете в качестве области содержимого. Затем в «ApplicationPanel» у вас есть метод, подобный 'saveConfiguration()'. Таким образом, этот метод будет иметь доступ ко всем данным в вашем классе и будет знать, как сохранить его в файле. Затем, как только у вас есть ссылка на Окно, вы можете получить панель содержимого окна, а бросок - в вашу «ApplicationPanel». – camickr

+0

Я вижу, что это немного меньше, чем я ожидал, спасибо! –

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

  • Нет связанных вопросов^_^