2016-12-25 61 views
3

我有一個使用了許多複選框的javafx應用程序。當一個複選框被選中時,一個按鈕將出現在主窗口中。複選框設置爲「false」會使按鈕消失。很簡單。使複選框記住它的狀態的最佳方法是什麼?

問題是,該複選框不記得它的確認,以及應用程序始終與複選框的選中狀態開始,如FXML文件中定義:

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

因爲我無法找到任何滿足於谷歌,我想出了一個本土解決方案,設置了一個函數,可以直接在fxml文檔中將複選框的選中狀態設置爲「true」或「false」,這很好地工作。

我只是想知道這是不錯的做法,簡單而有效,或者如果有人發現或可以想象出更優雅或簡約的解決方案。 (我以前的編程經驗更是在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文件夾(在Windows上)或用戶目錄(在Linux和Mac上)或保存應用程序的文件夾。

我寫了一個小型庫,創建*.properties文件並將它們保存在AppData文件夾(或用戶目錄,如果不在Windows上),您也可以使用它:Common

2

您可以使用.putBoolean()創建SharedPrefrences並添加值。

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 –

相關問題