2016-12-25 1 views
3

У меня есть приложение javafx, которое использует много флажков. Когда установлен флажок, в главном окне появится кнопка. Флажок установлен на «false», кнопка исчезает. Достаточно легко.Каков наилучший способ сделать checkbox помнить его состояние?

Проблема заключается в том, что флажок не помнит, что было проверено и приложение всегда начинается с флажками, выбранными, как определено в файле FXML:

<CheckBox fx:id="googleHider" onAction="#hideGoogle" selected="true" text="Google"> 

Так как я не мог найти ничего, удовлетворяющих на Google , Я придумал доморощенные решения, установив функцию, которая устанавливает выбранное состояние флажка в «true» или «false» непосредственно в документе fxml, который отлично работает.

Мне просто интересно, если это хорошая практика, простая и эффективная, или если кто-то нашел или может представить более элегантное или минималистичное решение. (Мой предыдущий опыт программирования больше в Python, я не знаю, если это показывает. Есть еще способ «Javaian» ...?)

boolean isSelected = googleHider.isSelected(); 


    if (isSelected == false) { 

     System.out.println("not selected"); 
     Path path = Paths.get("src/javafxapplication2/PopupFXML.fxml"); 
     Charset charset = StandardCharsets.UTF_8; 
     String content = new String(Files.readAllBytes(path)); 
     //following line changes the initial state of the checkbox from "true" to "false" 
     content = content.replaceAll("\"#hideGoogle\" selected=\"true\"", "\"#hideGoogle\" selected=\"false\""); 
     Files.write(path, content.getBytes(charset)); 

    } 
    else { 
     System.out.println("selected"); 
     Path path = Paths.get("src/javafxapplication2/PopupFXML.fxml"); 
     Charset charset = StandardCharsets.UTF_8; 
     String content = new String(Files.readAllBytes(path)); 
     // next line changes the state back from "false" to "true" 
     content = content.replaceAll("\"#hideGoogle\" selected=\"false\"", "\"#hideGoogle\" selected=\"true\""); 
     Files.write(path, content.getBytes(charset)); 

    } 
+2

Хотя мне нравится ваш подход, так как это из коробки, я все еще думаю, что более четкий способ сделать это было бы создать файл настройки, а затем при запуске чтения значения из файла и при выключении сохранить значение в файл – SteelToe

+0

хорошая идея, где бы этот файл настроек идеально располагался в приложении javafx? это будет txt.file? Знаете ли вы какую-либо документацию или более четкую ориентацию? – rainer

+1

Возможный дубликат [Как прочитать файл конфигурации в Java] (http://stackoverflow.com/questions/16273174/how-to-read-a-configuration-file-in-java) –

ответ

2

Я definnitely использовать файл настроек. Такой файл настроек не должен находиться в вашем приложении, так как вы не можете всегда изменять свое приложение во время его выполнения. Хорошие местоположения - это папка AppData (на окнах) или каталог пользователя (на linux и mac) или папка, в которой сохраняется приложение.

Я написал небольшую библиотеку, которая создает *.properties -files и сохраняет их в AppData (или каталог пользователя, если нет в окнах), вы также можете использовать его: Common

2

Вы можете создать SharedPrefrences и добавить значение с помощью .putBoolean().

if(ch.isSelected()){    

SharedPreferences settings = getSharedPreferences(PREFRENCES_NAME, 0); 
settings.edit().putBoolean("check",true).commit(); 
} 

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

http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

+0

приятная функция .. кажется, не работает в java ... вы что-нибудь подобное в java или javafx? – rainer

+0

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/CheckBox.html –